Как предотвратить ошибку тайм-аута при выполнении процедуры хранения с помощью SqlCommand?
У меня есть программа на С#, которая запускает хранимую процедуру. Если я запустил хранимую процедуру из студии управления сервером Microsoft SQL Server, она работает нормально. Выполнение занимает около 30 секунд. Однако, если я попытаюсь запустить ту же самую хранимую процедуру из программы на С#, она истечет, даже если я установил таймаут в строке подключения на 10 минут.
using (connection1 = new SqlConnection("user id=user_id_goes_here;password=password_goes_here;initial catalog=database_name_goes_here;data source=server_name_goes_here;connection timeout=600))
Кажется, что тайм-аут примерно через 30 секунд, хотя я установил его для 10 минут (для целей тестирования).
Ответы
Ответ 1
Тайм-аут на соединение только для подключения к базе данных.
Существует отдельное свойство CommandTimeout
класса SqlCommand
, используйте это свойство, чтобы указать время ожидания выполнения.
То есть.
using (SqlCommand cmd = new SqlCommand())
{
cmd.Connection = connection1;
cmd.CommandTimeout = 240; //in seconds
//etc...
}
Ответ 2
Используйте SqlCommand.CommandTimeout
свойство вашей команды вместо указания в строке подключения.
См. MSDN для справки.
Ответ 3
Вам нужно установить его в код i.e, установив свойство CommandTimeout для объекта команды sql.
Параметр "время ожидания соединения" в строке соединения представляет время ожидания при попытке установить соединение до прекращения попытки и создания ошибки. Это не тот момент, когда выполнение запроса истечет.
Спасибо, я также столкнулся с той же проблемой несколько недель назад и был смущен между значениями тайм-аута в webconfig vs в командном объекте. У меня вопрос очистился, теперь я сомневаюсь.
ссылка ссылки из msdn
Ответ 4
Тайм-аут соединения относится к количеству допустимого времени при фактическом подключении к SQL Server. Тайм-аут команды относится к тому, сколько времени допустимо для выполнения команды; в этом случае хранимую процедуру. SqlCommand.CommandTimeout
- это свойство, которое вы ищете.