Эта ошибка меня очень смутила. У меня есть хранимая процедура с двумя выходными параметрами, как определено ниже
@agentNumber int OUTPUT,
@currentAgentNum int OUTPUT,
Затем они заполняются с помощью операторов SELECT ниже.
SELECT @agentNumber = AgentNumber
FROM AgentIdentification
WHERE AgentTaxId = @ssn
SELECT @currentAgentNum = AgentNumber
FROM UniqueAgentIdToAgentId
WHERE AgentId = @agentId
В базе данных AgentNumber
определен в обеих таблицах как int
. Однако, когда я вызываю эту хранимую процедуру в своем коде C #, я получаю исключение SQL, в котором говорится:
Ошибка преобразования типа данных int в nvarchar.
Если я изменю типы данных выходных параметров на nvarchar
, код будет выполнен, однако он вернет только первую цифру целого числа. Ниже показано, как переменные определены в коде C #.
SqlParameter outNewAgentNumber = new SqlParameter("@agentNumber", "");//Output parameter - leave blank
SqlParameter outCurrentAgentNumber = new SqlParameter("@currentAgentNum", "");//Output parameter - leave blank
outNewAgentNumber.Direction = ParameterDirection.Output;
outCurrentAgentNumber.Direction = ParameterDirection.Output;
Я добавляю эти параметры к объекту SqlCommand
, указываю соответствующую базу данных и commandType
, затем использую .ExecuteNonQuery()
для вызова процедуры. Опять же, что меня действительно смутило, так это сообщение об ошибке, в котором говорится, что я использую nvarchar
в качестве типа данных, который может (насколько мне известно) относиться только к чему-то на стороне базы данных. Однако, как я уже сказал, я дважды / трижды проверил, и оба AgentNumber
столбца относятся к типу int
.
РЕДАКТИРОВАТЬ
Изменение деклараций sqlParameter на начальное значение 0 решило эту проблему. Теперь я столкнулся с той же проблемой с двумя другими параметрами.
SqlParameter outOperator = new SqlParameter("@operator", "");//Output parameter - leave blank
SqlParameter outDate = new SqlParameter("@date", "");//Output parameter - leave blank