.Net SQLCommand истекает при выполнении хранимой процедуры, которая не возвращает записей

Интересно, может ли кто-нибудь помочь?

У меня есть проблема с объектом SqlCommand, который при выполнении хранимой процедуры, которая не возвращает записей, истечет время ожидания.

Хранимая процедура не сложна, это просто SELECT ColumnA, ColumnB, ... FROM TableA WHERE Id = @Id вещь. Если я запускаю SP в Sql Managment Studio, он мгновенно возвращается.

Однако, когда я пытаюсь выполнить команду для заполнения DataAdapter или выполнить команду вручную из «Непосредственного окна» - после ее создания и заполнения параметров время ожидания всегда истечет.

Я использую метод DeriveParameters() SqlCommandBuilder для заполнения параметров SqCommand, а затем перебираю коллекцию и заполняю значения. Затем я задаю DataAdapter.SelectCommand ссылку на SqlCommand и вызываю метод заполнения DataAdapter.

Кажется, что код работает нормально с любым SP, который возвращает данные, но не работает, когда строки не возвращаются.

Кто-нибудь сталкивался с этим и может указать мне правильное направление, пожалуйста?

Заранее спасибо, С уважением, Дуэйн.


person Dib    schedule 19.08.2010    source источник
comment
Если вы покажете нам свой код, мы сможем дать вам ответ.   -  person LukeH    schedule 19.08.2010


Ответы (2)


В итоге оказалось, что в другой части кода была открыта транзакция на записи, которую мы читали.

Причина более чем одного подключения к базе данных заключается в том, что проект в настоящее время использует ADO и ADO.Net (это очень большой проект, который в настоящее время преобразуется из VB6 в .Net. По-прежнему существует много устаревшего доступа к данным с использованием АДО). Соединение ADO удерживало транзакцию открытой, а новое соединение ADO.Net не могло читаться до тех пор, пока транзакция не завершится, что могло произойти только ПОСЛЕ того, как время ожидания команды ADO.Net истекло, и была выдана ошибка, а транзакция ADO откатилась!

Дох!

Спасибо всем, кто прочитал и подумал над решением. Спасибо Бет за ее предложение.

С уважением, Дуэйн.

person Dib    schedule 21.08.2010
comment
Хороший улов. :) Спасибо, что опубликовали свое решение в конце. Я изменил SP в транзакции, и время ожидания DeriveParameters само по себе истекло. - person Jonathan; 09.07.2013

найдите свойство тайм-аута команды и установите его значение равным нулю.

    Dim cmd As SqlCommand

    cmd = New SqlCommand
    cmd.CommandText = spName
    cmd.CommandType = CommandType.StoredProcedure
    cmd.Connection = _sqlConn
    cmd.CommandTimeout = 0
person Beth    schedule 19.08.2010
comment
Привет, Бет, спасибо за совет. В этом случае свойство времени ожидания команды было установлено на 15 с, и запрос при запуске в SSMS выполняется в мгновение ока. Время ожидания истекло только при запуске из кода. - person Dib; 21.08.2010