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