@Return_Value总是-1

时间:2016-09-09 11:00:48

标签: c# return-value

在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();
    }
}

1 个答案:

答案 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);