Исключение тайм-аута подключения для запроса с использованием ADO.Net - PullRequest
9 голосов
/ 20 сентября 2008

Обновление : похоже, что запрос не выбрасывает время ожидания. Время ожидания истекло.

Это пример кода для выполнения запроса. Иногда при выполнении длительных запросов выдается исключение тайм-аута.

Я не могу использовать любой из этих методов: 1) Увеличьте время ожидания. 2) Запустите его асинхронно с обратным вызовом. Это должно выполняться синхронно.

, пожалуйста, предложите какие-нибудь другие технические приемы, чтобы поддерживать соединение во время выполнения трудоемкого запроса?

private static void CreateCommand(string queryString,
    string connectionString)
{
    using (SqlConnection connection = new SqlConnection(
               connectionString))
    {
        SqlCommand command = new SqlCommand(queryString, connection);
        command.Connection.Open();
        command.ExecuteNonQuery();
    }
}

Ответы [ 16 ]

0 голосов
/ 12 мая 2009

Вы думали о разбиении запроса на несколько более мелких кусков?

Кроме того, выполняли ли вы свой запрос к помощнику по настройке ядра СУБД в:

Management Studio> Инструменты> Помощник по настройке ядра СУБД

Наконец, мы могли бы взглянуть на сам запрос?

ура

0 голосов
/ 06 мая 2009

просто установите свойство CommandTimeout sqlcommand в 0, это заставит команду ждать, пока запрос не завершится ... например:

SqlCommand cmd = new SqlCommand(spName,conn);
cmd.CommandType = CommandType.StoredProcedure;
cmd.CommandTimeout = 0;
0 голосов
/ 20 сентября 2008

Мне не нравится увеличивать время ожидания соединения / команды, поскольку, на мой взгляд, это вопрос заботы о симптоме, а не о проблеме

0 голосов
/ 20 сентября 2008

Вы должны разбить ваш запрос на несколько частей, каждый из которых выполняется в течение периода ожидания.

0 голосов
/ 20 сентября 2008

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

0 голосов
/ 20 сентября 2008
command.CommandTimeout *= 2;

Это удвоит время ожидания по умолчанию, которое составляет 30 секунд.

Или поместите значение CommandTimeout в файл конфигурации, чтобы вы могли настроить его по мере необходимости без перекомпиляции.

...