在C#QueriesTableAdapter和VS 2015 Service Pack 3中调用存储过程时,获取@RETURN_VALUE
参数存在很大问题。我将项目直接连接到存在于SQL Server 2012中的存储过程。
此方法使用输入或输出参数正常工作但是检索@return_value
不起作用(是Vs BUG?)。我在课堂上注意到Command.Parameter[0]
为@RETURN_VALUE
任何想法?,我需要使用这些存储而不进行修改,因为它们被其他应用程序使用,@return_value
非常重要。
感谢您的帮助
int returnValue;
try {
returnValue = command.ExecuteNonQuery();
//returnValue is Always -1!
}
finally {
if ((previousConnectionState == global::System.Data.ConnectionState.Closed)) {
command.Connection.Close();
}
}
答案 0 :(得分:1)
你以错误的方式处理参数。
从MSDN ExecuteNonQuery
返回:
对于UPDATE,INSERT和DELETE语句,返回值为 受命令影响的行数。当a上存在触发器时 正在插入或更新的表,返回值包括数字 受插入或更新操作影响的行数和数字 受触发器或触发器影响的行数。对于所有其他类型的行 语句,返回值为-1。
所以-1是正确的,你永远不会得到任何计算结果。
正确使用输出参数:
cmd.Parameters.Add("@ReturnValue", SqlDbType.Int).Direction = ParameterDirection.Output;
cmd.ExecuteNonQuery();
int result = Convert.ToInt32(cmd.Parameters["@ReturnValue"].Value);