5

你能用吗

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

当 sproc 的最后一条语句执行时:

RETURN @value

我只能让它工作,如果它这样做:

选择@值

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

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

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

4

2 回答 2

8

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

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

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

于 2009-02-06T15:38:00.073 回答
3

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

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

随着转换,一些实际的解析和逻辑发生,它处理被转换的对象为空的情况。

这里有更多关于此的信息。

于 2009-02-06T16:06:34.820 回答