Тайм-аут выполнения истек при закрытии IDataReader

Я получаю огромное количество данных с SQL Server. Все работает нормально, но когда я пытаюсь закрыть IDataReader внутри, используя оператор

try
    {
      using (SqlConnection con = new SqlConnection(connString))
       {
         con.Open();
         using (SqlCommand command = new SqlCommand(sql_query, con))
         {
           command.CommandTimeout = 0;

           using (IDataReader rdr = new SqlCommand(sql_query, con).ExecuteReader(CommandBehavior.SequentialAccess))
            {
              dataTable = GetDataTableFromDataReader(rdr);
            }
             ....

Я получаю: Время выполнения истекло. Время ожидания истекло до завершения операции или сервер не отвечает.

Было бы лучше использовать что-то вроде rdr = null? Или есть другое лучшее решение, как закрыть IDataReader?

1 ответ

Решение

Обратите внимание, что существуют настройки тайм-аута как для соединения, так и для команды. Вам не нужно закрывать или утилизировать вручную внутри блока использования.

Вы создаете второй SqlCommand в using блок, для которого не задано время ожидания. Изменить на:

using (IDataReader rdr = command.ExecuteReader(CommandBehavior.SequentialAccess))
{
    dataTable = GetDataTableFromDataReader(rdr);
}
Другие вопросы по тегам