Я пытаюсь перехватить значения, переданные хранимой процедуре во время выполнения. Я написал хранимую процедуру со следующим кодом для сбора информации:
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.