问题描述
我有一个返回正整数或 -1 的存储过程。 我有这段代码调用该存储过程,但我不知道为什么它无法捕获从存储过程返回的值
system("pdftk test1.pdf stamp stamp.pdf output test1S.pdf")
存储过程
sqlConnection sqlConn = GetNewsqlConnection();
await sqlConn.OpenAsync();
try
{
var ret = await sqlConn.ExecuteScalarasync<int>(
"dbo.Usp_Comment_Update",new
{
CommentID_in = model.CommentID,Comment_in = model.Comment,CommentTypeID_in = model.CommentTypeID,SortIndex_in = model.sortIndex,UpdatedBy_in = model.UpdatedBy
},commandType: CommandType.StoredProcedure);
return (int)ret;
}
catch (Exception ex)
{
throw ex;
}
finally
{
if (sqlConn.State != ConnectionState.Closed)
{
sqlConn.Close();
}
sqlConn.dispose();
}
上面的代码总是返回 0。我读过这里的一篇文章,建议看看返回数据类型是什么。所以我在 ExecuteScalarasync 之后删除并在 Watch 窗口中查找变量 ret ,它是一个空对象。连接字符串是正确的,并且在调用后连接到正确的数据库,数据按预期更新。我什至试图删除存储过程中除 RETURN -1 之外的所有内容,但我仍然从 ExecuteScalarasync 中得到 0。
我在这里做错了什么?
解决方法
在您的存储过程中删除此 SET NOCOUNT ON
以获得正确的 @@ROWCOUNT
值。
有关详细信息,请查看此SET NOCOUNT (Transact-SQL)
不要使用RETURN -1
,而是使用SELECT -1
。标量值是一个类似表格的结果,带有单个值(1 行 1 列)。