2009-10-29 2 views
2

Я использую объект SqlClient.SqlCommand для запуска нескольких хранимых процедур на моем db. Обычно, когда я запускаю их вручную через Query Analyzer, они занимают до 15 минут.Объект SqlCommand - установить его и забыть?

Так что, очевидно, когда я запускаю их с помощью объекта SqlCommand, я получаю тайм-аут SqlCommand.

Я знаю, что могу установить свойство тайм-аута на очень большое число, но мне интересно, если альтернативно есть способ просто запустить procs и отключиться. Мне не нужна возвращаемая стоимость.

Любые предложения? Меня не интересует оптимизация времени обработки каждого sp здесь, просто пытаясь определить, есть ли опция «установить и забыть».

Вот содержание объекта SqlCommand:

using (SqlCommand cmd = new SqlCommand(@"update tbl_SYS_DATE set RPT_DATE = @inputDate 
                exec sp_Get_Bp_Data1 
                exec sp_Get_Bp_Data2   
                exec sp_Get_Bp_Data3 
                exec sp_channel_data1 
                exec sp_channel_data2 
                exec sp_channel_data3 
                ", con)) 

ответ

5

Вы можете использовать метод async, например BeginExecuteNonQuery. Тайм-аут для этого игнорируется.

+0

+1 - избили меня на 22 секунды (но нет ссылки, так кто действительно выиграл? :-)) –

+0

Хорошо быть честным, я прочитал эту страницу, чтобы проверить свой ответ. :) – Jason

+0

Если вы используете этот метод, убедитесь, что вы не поместите свой SqlConnection в предложение using, или соединение будет удалено, прежде чем команда будет выполнена. – Aheho

0

Вы можете запустить этот код из фонового потока. Вы можете посмотреть объект BackgroundWorker.

4

Использовать асинхронный вызов метода BeginExecuteNonQuery. От the MSDN page

Свойство CommandTimeout будет игнорироваться во время асинхронного вызова методов, таких как BeginExecuteReader.

 Смежные вопросы

  • Нет связанных вопросов^_^