Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/283.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 当存储过程使用RETURN@value时,是否可以使用cmd.ExecuteScalar_C#_Ado.net_Executescalar - Fatal编程技术网

C# 当存储过程使用RETURN@value时,是否可以使用cmd.ExecuteScalar

C# 当存储过程使用RETURN@value时,是否可以使用cmd.ExecuteScalar,c#,ado.net,executescalar,C#,Ado.net,Executescalar,你能用吗 int blah = Convert.ToInt32(cmd.ExecuteScalar()); 存储过程的最后一条语句执行以下操作时: RETURN @value 只有在以下情况下,我才能让它工作: 选择@value 此外,这给了我一个对象null异常: int blah = (int)cmd.ExecuteScalar(); convert.toint32和(int)不是一回事,但一个是另一个的包装器吗?不,不能。ExecuteScalar()方法设计为以结果集中返回的单个值

你能用吗

int blah = Convert.ToInt32(cmd.ExecuteScalar());
存储过程的最后一条语句执行以下操作时:

RETURN @value
只有在以下情况下,我才能让它工作:

选择@value

此外,这给了我一个对象null异常:

int blah = (int)cmd.ExecuteScalar();

convert.toint32和(int)不是一回事,但一个是另一个的包装器吗?

不,不能。ExecuteScalar()方法设计为以结果集中返回的单个值的形式返回。基本上,返回第一行第一列中的值

要获取返回值,需要向SQLCommand对象添加一个参数。在创建参数对象时,使用名称“@RETURN\u VALUE”并指定参数的返回方向。然后可以使用ExecuteNonQuery()方法


我必须注意,在IMO中,存储过程返回值应该只是指示过程的状态。所有数据都应通过结果集或输出参数返回。

回答您的另一个问题,(int)是一种转换,实际上与转换(Convert.ToInt32)不同

在强制转换中,您可以说被强制转换的对象实际上是您强制转换到的类型,因此没有进行真正的转换/解析。由于int不能为null,因此当您正在强制转换的对象为null时,强制转换无效,并引发异常

使用convert进行一些实际的解析和逻辑,它处理被转换的对象为null的情况

这里有更多关于这个的信息