我正在尝试读取存储过程返回的OUT参数值,但它抛出错误 DBNULL 。甚至该过程都在返回值。
代码:
int? outParam= 0;
SqlParameter sqlParam= new SqlParameter("@model", user.Name+" Model");
SqlParameter sqlParamOut = new SqlParameter("out", outParam);
sqlParamOut.DbType = System.Data.DbType.Int32;
sqlParamOut.Direction = System.Data.ParameterDirection.Output;
UsersPhonesDBContext.Database.ExecuteSqlCommand("dbo.InsertPhones @model, @out", sqlParam, sqlParamOut);
outParam = Convert.ToInt32(sqlParamOut.Value);
SP:
alter PROCEDURE InsertPhones (
@model varchar(100),
@out int output
)
AS
BEGIN
Insert into Phones (Model, Manufacturer)
Values
(
@model,
'Hunain Phone'
)
set @out= SCOPE_IDENTITY();
Select @out
END
GO
答案 0 :(得分:3)
out
参数很有趣。您必须在任何地方重复自己。 。
具体地说,在这里,您忘记了在调用存储的proc时在参数列表中提及它。 dbo.InsertPhones @model, @out
应该是dbo.InsertPhones @model, @out out
。也许还有一种方法可以从此字符串中省略参数列表,并指示SQL Server为它指定一个存储过程名称,而不是任意查询文本,但是我不确定在此如何具体使用( SqlCommand
对象,可以通过CommandType
属性)。
如果您使用的是out
参数,则不需要在存储过程的末尾使用select
,但是我认为这是一种修复方法。