ADO.Net проблема тайм-аута DataReader

Я использую ADO.Net + C# + VSTS 2008 + ADO.Net подключение к SQL Server 2008 Enterprise. Я использую почти тот же шаблон / образец, упомянутый здесь, используя ADO.Net DataReader для извлечения данных одной записи (строки) по одной записи (строке).

http://msdn.microsoft.com/en-us/library/haa3afyz.aspx

мой вопрос в том, если я установил тайм-аут SqlCommand в этом примере, 1. Я думаю, что тайм-аут применяется к тому, сколько времени мы могли бы использовать в качестве максимального значения для извлечения одна строка specifc, а не Общее время ожидания для всего цикла ввода данных?

BTW: цикл я имею в виду,

while (reader.Read())
{
    Console.WriteLine("{0}t{1}", reader.GetInt32(0),
        reader.GetString(1));
}

2. и этот тайм-аут только важно, сколько времени это берет, чтобы получить данные записи из базы данных, и этот тайм-аут не имеет ничего общего с тем, как много времени мы имеем дело с каждой записи (например, если мы устанавливаем время ожидания до 20 секунд, и если это займет 1 секунду, чтобы получить одну запись данных из базы данных, и это займет 30 секунд для моего приложения логики для управления данными записи, тайм-аут никогда не произойдет).

правильное понимание?

2 ответов


тайм-аут команды, который вы можете установить, применяется к тому, как долго вы даете ADO.NET делать свою работу.

если вы называете cmdQuery.ExecuteNonQuery() который ничего не возвращает, но выполняет инструкцию SQL, это время, необходимое для выполнения этой инструкции.

если вы называете cmdQuery.ExecuteReader() который возвращает считыватель данных, это время, необходимое для ADO.NET чтобы настроить / построить этот считыватель данных, чтобы вы могли его использовать.

если вы называете cmdQuery.ExecuteScalar() который возвращает одно скалярное значение, это время необходимо выполнить запрос и захватить этот единственный результат.

если вы используете dataAdapter.Fill() чтобы заполнить таблицу данных или набор данных, это время, необходимое для ADO.NET чтобы получить данные, а затем заполнить таблицу данных или набор данных.

Итак, в целом: тайм-аут применяется к той части задания, которая ADO.NET can do-выполнить инструкцию, заполнить набор данных, вернуть скалярное значение.

конечно не применить ко времени вы to повторите результаты (в случае чтения данных). В этом нет никакого смысла...

Марк


Да, вы правы. CommandTimeout означает время, необходимое базе данных для выполнения команды (любой команды)