2016-12-23 46 views
-4

Когда я запускаю мой код, я получаю следующее исключение:Истекло время ожидания выполнения. Время ожидания истекло до завершения операции или сервер не отвечает

необработанного исключения «System.Data.SqlClient.SqlException» типа произошел in System.Data.dll

Дополнительная информация: Срок ожидания выполнения истек. Период ожидания истекает до завершения операции или сервер не отвечает.

Мой код выглядит следующим образом:

private void FillInDataGrid(string SQLstring) 
    { 
     string cn = ConfigurationManager.ConnectionStrings["Scratchpad"].ConnectionString; //hier wordt de databasestring opgehaald 
     SqlConnection myConnection = new SqlConnection(cn); 
     SqlDataAdapter dataadapter = new SqlDataAdapter(SQLstring, myConnection); 
     DataSet ds = new DataSet(); 
     myConnection.Open(); 
     dataadapter.Fill(ds, "Authors_table"); 
     myConnection.Close(); 
     dataGridView1.DataSource = ds; 
     dataGridView1.DataMember = "Authors_table"; 
    } 

И мой SqlString следующий:

SELECT dbo.[new].[colom1],dbo.[new].[colom2],dbo.[new].[colom3],dbo.[new].[colom4], 
       dbo.[new].[Value] as 'nieuwe Value', 
       dbo.[old].[Value] as 'oude Value' 
       FROM dbo.[new] 
       JOIN dbo.[old] ON dbo.[new].[colom1] = dbo.[old].[colom1] and dbo.[new].[colom2] = dbo.[old].[colom2] and dbo.[new].[colom3] = dbo.[old].[colom3] and dbo.[new].[colom4] = dbo.[old].[colom4] 
       where dbo.[new].[Value] <> dbo.[old].[Value] 
+1

Ваш запрос, кажется, требует времени –

+0

@EhsanSajjad Считаете ли вы, что проблема времени здесь? –

+0

@EhsanSajjad Я 'только' получил таблицу вокруг 7000rows –

ответ

0

Если запрос нужно больше, чем по умолчанию 30 секунд, вы можете установить CommandTimeout выше. Чтобы сделать это, вы измените его после создания экземпляра DataAdapter на SelectCommand свойство этого экземпляра, например, так:

private void FillInDataGrid(string SQLstring) 
{ 
    string cn = ConfigurationManager.ConnectionStrings["Scratchpad"].ConnectionString; //hier wordt de databasestring opgehaald 
    DataSet ds = new DataSet(); 
    // dispose objects that implement IDisposable 
    using(SqlConnection myConnection = new SqlConnection(cn)) 
    { 
     SqlDataAdapter dataadapter = new SqlDataAdapter(SQLstring, myConnection); 

     // set the CommandTimeout 
     dataadapter.SelectCommand.CommandTimeout = 60; // seconds 

     myConnection.Open(); 
     dataadapter.Fill(ds, "Authors_table"); 
    } 
    dataGridView1.DataSource = ds; 
    dataGridView1.DataMember = "Authors_table"; 
} 

Другой вариант заключается в рассмотрении запроса. На сервере Sql вы можете проанализировать execution plan. Уверен, что в нем есть полноэкранное сканирование. Вы можете поэкспериментировать с добавлением индекса в один или два столбца в таблице [old] и [new]. Имейте в виду, что добавление индексов происходит за счет увеличения времени выполнения для вставок и обновлений и требований к пространству.

+0

Я пробовал 60 секунд, но он все еще не загружал, им нужно попробовать 15 минут, есть ли способ ускорить процесс? помимо изменения моего процессора. –

+0

Как я уже сказал, ваш запрос является проблемой. Вы можете попробовать добавить индексы. И я просто запустил бы это заявление в Sql Server management studio и оптимизировал его на основе результатов плана выполнения. – rene

+0

Через час все еще не было сделано: P Теперь я выполняю запрос в студию управления SQL-сервером, которая уже занимает 5 минут haha –

Смежные вопросы

 Смежные вопросы