CommandTimeout не работает - PullRequest
       2

CommandTimeout не работает

11 голосов
/ 24 февраля 2012

Я пытаюсь изменить время ожидания для запроса SqlCommand в методе, который проверяет мое соединение на наличие заданной строки соединения. Код похож на это:

using (SqlConnection connection = new SqlConnection(connectionString))
    {
      SqlCommand cmd = new SqlCommand("SELECT ...", connection);
      cmd.CommandTimeout = 10;
      connection.Open();
      SqlDataReader reader = cmd.ExecuteReader();
      ...
      connection.Close();
    }

Я бы хотел, чтобы здесь был короткий тайм-аут, так как я просто хочу проверить, в порядке ли эта строка подключения. Но независимо от того, какое число я установил в CommandTimeout (я пробовал 0, 1, 2, 4, 10, 30, 60, 120), мое реальное время, полученное для фиктивной строки подключения, всегда примерно одинаково (общее время работы 15 секунд).

Итак, мне кажется, что значение, которое я установил в CommandTimeout, почему-то игнорируется.

Есть идеи почему?

Ответы [ 4 ]

7 голосов
/ 24 февраля 2012

Я думаю, вы путаете, для чего именно SqlCommand.CommandTimeout. Согласно эта ссылка MSDN :

Получает или задает время ожидания перед завершением попытки выполнить команду и генерацией ошибки.

В вашем случае вы запускаете DataReader и выполняете свой запрос (каким бы он ни был). Это занимает минимальное время для каждого Read(), поэтому вы не будете терять время.

Редактировать

Если вы используете неправильную строку соединения, ваш Timeout не будет временем ожидания команды, но будет временем соединения. По умолчанию это 15 секунд. Это тайм-аут, который эффективен в вашей ситуации.

Вы собираетесь использовать тайм-аут при вызове метода SqlConnection.Open(), а не SqlCommand.ExecuteReader(). Поэтому свойство ConnectionTimeout будет эффективным значением времени ожидания.

Свойство SqlConnection.ConnectionTimeout Ссылка MSDN

1 голос
/ 24 февраля 2012

Вам также необходимо проверить время ожидания соединения, которое по умолчанию составляет 15 секунд.

Также см. http://msdn.microsoft.com/en-us/library/system.data.sqlclient.sqlcommand.commandtimeout.aspx - если строка подключения имеет контекст, CommandTimeout игнорируется

0 голосов
/ 22 января 2018

Вы также можете указать это в строке подключения в вашем конфигурационном файле:

<connectionStrings>
  <add name="*con_name*" connectionString="data source=*dsource*;initial catalog=*catalog*;integrated security=True;Connect Timeout=300;MultipleActiveResultSets=True" providerName="System.Data.SqlClient" />
</connectionStrings>
0 голосов
/ 24 февраля 2012

Вы можете изменить SqlConnection.ConnectionTimeout в этом случае.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...