Я использую объект SqlClient.SqlCommand для запуска нескольких хранимых procs на моем db. Обычно, когда я запускаю их вручную через Query Analyzer, они занимают до 15 минут.
Поэтому, когда я запускаю их с помощью объекта 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))
Вы можете использовать метод async, например BeginExecuteNonQuery. Тайм-аут для этого игнорируется.
Использовать асинхронный вызов метода BeginExecuteNonQuery. Из страница MSDN
Свойство CommandTimeout будет игнорироваться во время асинхронных вызовов методов, таких как BeginExecuteReader.
Вы можете запустить этот код из фонового потока. Вы можете заглянуть в объект BackgroundWorker.