使用MVC 5,EF6和c#
我有一个接受输入并返回值1的存储过程。(为简化示例)奇怪的是,当我尝试将Return值声明为ParameterDirection.Return Value时,我得到
必须声明标量变量@ReturnVal
如果我将SQLParameterDirection切换为OutPut,则可以正常工作。我只是想了解为什么我不能使用ParameterDirection.ReturnValue?
这里有代码。
SP:
[dbo].TestProc ( @UserId int)
AS
BEGIN
return 1
end
和c#调用代码。
public async Task<ActionResult> DoStuff()
{
using (var _context = new Model1())
{
SqlParameter sqlUserId = new SqlParameter("@UserId", 1) ;
SqlParameter returnVal = new SqlParameter("@ReturnVal", SqlDbType.Int)
{
Direction = ParameterDirection.ReturnValue
};
await _context.Database.ExecuteSqlCommandAsync("exec @ReturnVal= [TestProc ] @UserId", returnVal, sqlUserId);
var result = (int)returnVal.Value; // Return Correct Value.
}
return View();
}
答案 0 :(得分:0)
我认为您需要在SP中声明@ReturnValue并将其返回。像
[dbo].TestProc ( @UserId int, @ReturnValue int output)
AS
BEGIN
select @ReturnValue = 1
end
我认为问题在于SP中不存在ReturnValue,因此在C#中创建SqlParameter时无法将其匹配