这个错误让我很困惑。我有一个带有两个输出参数的存储过程,定义如下
@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