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的情况 这里有更多关于这个的信息