Вопрос

Я использую объект 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 .

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top