C# @返回值始终为-1

C# @返回值始终为-1,c#,return-value,C#,Return Value,在C#QueriesTableAdapter和VS 2015 service pack 3中调用存储过程时,获取@RETURN_VALUE参数有一个大问题。我将项目直接连接到SQL server 2012中存在的存储过程 此方法使用输入或输出参数可以正常工作,但检索@return\u value不起作用(是Vs错误吗?)。我注意到类中的命令。参数[0]为@RETURN\u VALUE 有什么想法吗?我需要不经修改地使用存储的这些,因为它们被其他应用程序使用,@return\u value非常重要

在C#QueriesTableAdapter和VS 2015 service pack 3中调用存储过程时,获取
@RETURN_VALUE
参数有一个大问题。我将项目直接连接到SQL server 2012中存在的存储过程

此方法使用输入或输出参数可以正常工作,但检索
@return\u value
不起作用(是Vs错误吗?)。我注意到类中的
命令。参数[0]
@RETURN\u VALUE

有什么想法吗?我需要不经修改地使用存储的这些,因为它们被其他应用程序使用,
@return\u value
非常重要

谢谢你的帮助

int returnValue;
try {
    returnValue = command.ExecuteNonQuery();
    //returnValue is Always -1!
}
finally {
    if ((previousConnectionState == global::System.Data.ConnectionState.Closed)) {
        command.Connection.Close();
    }
}

您以错误的方式处理参数

ExecuteNonQuery
返回:

对于UPDATE、INSERT和DELETE语句,返回值为 受命令影响的行数。当触发器存在于 在插入或更新表时,返回值包括数字 受插入或更新操作和编号影响的行数 受一个或多个触发器影响的行数。对于所有其他类型的 语句,返回值为-1

所以-1是正确的,这样你永远不会得到任何计算结果

正确使用输出参数:

cmd.Parameters.Add("@ReturnValue", SqlDbType.Int).Direction = ParameterDirection.Output;    
cmd.ExecuteNonQuery();
int result = Convert.ToInt32(cmd.Parameters["@ReturnValue"].Value);

非常感谢您的回复。我调用的存储过程执行SELECT语句,它没有触发器。不管怎样,我正在为查询使用自动代码创建,然后,我不知道如何添加您所说的参数。你的意思是在有完整代码的地方修改datasetname.xsd文件吗?哦,对不起,我理解你的意思。我有一个大问题,因为我需要在存储过程中使用RETURN语句值,因为其他应用程序(DELPHI)以其他方式管理它…:-(这对我来说是个大问题。非常感谢你的帮助。我学到了一个非常有用的信息。然后它应该按照建议的方式进行,我不需要修改存储过程代码来添加新的输出参数