Тайм-аут выполнения истек при закрытии 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);
}