你能用吗
int blah = Convert.ToInt32(cmd.ExecuteScalar());
当 sproc 的最后一条语句执行时:
RETURN @value
我只能让它工作,如果它这样做:
选择@值
此外,这给了我一个对象空异常:
int blah = (int)cmd.ExecuteScalar();
convert.toint32 和 (int) 不是一回事,但一个是另一个的包装?
你能用吗
int blah = Convert.ToInt32(cmd.ExecuteScalar());
当 sproc 的最后一条语句执行时:
RETURN @value
我只能让它工作,如果它这样做:
选择@值
此外,这给了我一个对象空异常:
int blah = (int)cmd.ExecuteScalar();
convert.toint32 和 (int) 不是一回事,但一个是另一个的包装?
你不能。ExecuteScalar() 方法设计为在结果集中返回单个值。基本上,第一行的第一列中的值返回。
要获取返回值,您需要向 SQLCommand 对象添加一个参数。在创建参数对象时使用名称“@RETURN_VALUE”并指定返回的参数方向。然后,您可以使用 ExecuteNonQuery() 方法。
我必须注意 IMO,存储过程的返回值应该简单地指示过程的状态。所有数据都应通过结果集或输出参数返回。
要回答您的另一个问题, (int) 是一个强制转换,实际上与转换 (Convert.ToInt32) 不同。
在强制转换中,您有点说被强制转换的对象实际上是您要强制转换的类型,因此没有进行真正的转换/解析。由于 int 不能为 null,因此当您要转换的对象为 null 时,转换无效,并引发异常。
随着转换,一些实际的解析和逻辑发生,它处理被转换的对象为空的情况。
这里有更多关于此的信息。