проблема с Async SqlComman - PullRequest
       15

проблема с Async SqlComman

0 голосов
/ 04 апреля 2010

У меня проблема с Timeout, когда я запускаю команду через приложение, возникает исключение тайм-аута, но когда я запускаю его напрямую в sql, исключение тайм-аута не возникает!

Мой SP занимает около 11 минут, когда я запускаю его напрямую. для решения этой проблемы я нашел ниже код здесь, но он не работает должным образом! Сразу после beginExecute значение IAsyncResult.iscomplete становится истинным !!!!

в чем проблема?

IAsyncResult result = command.BeginExecuteNonQuery();

    int count = 0;
    while (!result.IsCompleted)
    {
        Console.WriteLine("Waiting ({0})", count++);
        System.Threading.Thread.Sleep(1000);
    }
    Console.WriteLine("Command complete. Affected {0} rows.",
    command.EndExecuteNonQuery(result));

привет

Ответы [ 2 ]

0 голосов
/ 04 апреля 2010

Вместо этого увеличьте время ожидания команды ( SqlCommand.CommandTimeout ), которое по умолчанию составляет 30 секунд.

0 голосов
/ 04 апреля 2010

Строка подключения по умолчанию будет иметь 15-секундный тайм-аут. См. MSDN .

Вы можете изменить время ожидания в строке подключения, чтобы оно длилось дольше (connection timeout=600, для 10-минутного перерыва).

См. этот сайт для получения дополнительной информации о строках подключения.

Сказав это, вы должны взглянуть на оптимизацию вашей базы данных и / или хранимой процедуры. 11 минут для хранимой процедуры очень и очень долго. У вас есть правильные индексы на ваших таблицах? Ваша хранимая процедура написана наиболее оптимальным способом?

Обновление:

Вы убедились, что используете правильную команду и результаты верны? Истина IsComplete почти сразу говорит о том, что команда действительно завершилась.

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