.Net SQLCommand истекает при выполнении хранимой процедуры, которая не возвращает записей - PullRequest
0 голосов
/ 19 августа 2010

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

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

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

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

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

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

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

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

Ответы [ 3 ]

1 голос
/ 21 августа 2010

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

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

Doh!

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

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

0 голосов
/ 08 ноября 2012
com = new SqlCommand("insert1",con);

com.CommandType = System.Data.CommandType.StoredProcedure;

com.Parameters.Add("@eno",eno.Text);
com.Parameters.Add("@ename",ename.Text);
com.Parameters.Add("@sal",sal.Text);
Response.Write(com.ExecuteNonQuery().ToString());
0 голосов
/ 19 августа 2010

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

    Dim cmd As SqlCommand

    cmd = New SqlCommand
    cmd.CommandText = spName
    cmd.CommandType = CommandType.StoredProcedure
    cmd.Connection = _sqlConn
    cmd.CommandTimeout = 0
...