C# @返回值始终为-1
在C#QueriesTableAdapter和VS 2015 service pack 3中调用存储过程时,获取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非常重要
@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)以其他方式管理它…:-(这对我来说是个大问题。非常感谢你的帮助。我学到了一个非常有用的信息。然后它应该按照建议的方式进行,我不需要修改存储过程代码来添加新的输出参数