Использование sys.dm_exec_input_buffer для получения значений параметров - PullRequest
0 голосов
/ 21 апреля 2020

Я пытаюсь перехватить значения, переданные хранимой процедуре во время выполнения. Я написал хранимую процедуру со следующим кодом для сбора информации:

  Declare @ExecutionInfo NVarChar(max)

  Select  @ExecutionInfo = event_info
  From    sys.dm_exec_input_buffer(@@spid, current_request_id())

Я беру @ExecutionInfo и вставляю в таблицу журнала. Когда я выполняю свою хранимую процедуру из SQL Server Management Studio, я могу записать в таблицу следующую информацию «MySampleProcedure @ CustomerID = 'ABC100'».

Мне пришлось предоставить VIEW SERVER STATE доступ к Конечно, учетная запись, выполняющая процедуру, чтобы это работало.

Проблема, с которой я сейчас сталкиваюсь, заключается в том, что когда я вызываю ту же самую процедуру из. Net, используя SqlClient, тогда параметры не регистрируются. Все, что я могу войти, это "MySampleProcedure; 1". Он не регистрирует параметр @CustomerID или его значение, но я могу вернуть ожидаемый результат из хранимой процедуры.

Кто-нибудь знает, может быть, SqlClient может быть проблема здесь? Может быть, поддерживается System.Data.Oledb?

Я использую ту же учетную запись в Visual Studio при запуске хранимой процедуры, что и учетную запись, которую я использую для запуска SQL Management Studio, на случай, если кому-то интересно permissions.

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

Обновление: Таким образом, похоже, что проблема связана с тем, когда я добавляю SqlParameters к SqlCommand.

sqlCommand.CommandType = System.Data.CommandType.StoredProcedure;
sqlCommand.CommandText = procedureName;
if (parameters != null)
{
    sqlCommand.Parameters.AddRange(parameters);
}

Однако, если я изменю CommandType = System.Data.CommandType.Text и передам параметры в виде текста, я смогу правильно записать параметры в базу данных. Это определенно связано с SqlClient и с тем, как он передает параметры на SQL сервер. Я надеюсь, что кто-то смог найти решение для этой проблемы, потому что мне непременно нужно передать параметры в мои сохраненные процессы вместо использования CommandType.Text.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...