исполняемый запрос, вызывающий параметризованную хранимую процедуру, не отвечает - PullRequest
0 голосов
/ 22 марта 2010

Я выполняю хранимую процедуру SQL из кода C #, но она не отвечает вообще. Нет исключений или сгенерированных ошибок. Обработка как будто зависает. Хранимая процедура состоит из нескольких операторов обновления и оператора выбора. Хранимая процедура работает нормально независимо и для ее выполнения требуется около 3-5 минут, тогда как при вызове из кода C # она не отвечает даже через 20 минут или более. Когда я комментирую большинство операторов обновлений, один запускает только один или два, исполняемый запрос работает. Я даже увеличил время команды Timeout.

Пожалуйста, предложите, поскольку это что-то срочное. Пожалуйста, найдите ниже код C #:

C # функция:

private void PanDatabase(DateTime StartDate, DateTime EndDate)
    {
        SqlConnection conn = new SqlConnection(System.Configuration.ConfigurationSettings.AppSettings["connectionString"]);

        SqlCommand cmd = new SqlCommand("PanData", conn);

        cmd.CommandType = System.Data.CommandType.StoredProcedure;

        cmd.Parameters.Add(new SqlParameter("@start_date", StartDate.ToShortDateString()));
        cmd.Parameters.Add(new SqlParameter("@end_date", EndDate.ToShortDateString()));
        cmd.Parameters.Add(new SqlParameter("@period_status", _periodPan));

        conn.Open();

        cmd.CommandTimeout = 9000;

        cmd.ExecuteNonQuery();

        cmd.Dispose();
        conn.Close();
        conn.Dispose();
    }

Ответы [ 2 ]

1 голос
/ 22 марта 2010

По умолчанию ваш .Net-код выполняется в Сериализуемой транзакции.Может ли это быть причиной блокировки?В рамках одного сохраненного процесса я не вижу в этом проблемы, но если вы вызываете несколько запросов к БД из .Net, они могут мешать друг другу.

Вы можете проверить блокировку, посмотревпри статусе работы в БД Менеджер "Монитор активности" *.Как предполагает Мартин, более детальная диагностика должна быть возможна с помощью SQL Profiler.(* Только при наличии достаточных прав доступа к БД.)

Проверьте наличие нескольких вызовов одного и того же хранимого процесса, добавив несколько операторов System.Diagnostics.Trace в код .Net.

0 голосов
/ 22 ноября 2012

Простой ответ - добавить ...

cmd.Parameters.Clear();

... перед добавлением новых параметров и повторным вызовом ExecuteNonQuery().

...