从c#中的cmd.Parameters获取ReturnValue?

时间:2010-03-29 14:49:59

标签: c# asp.net sql parameters

我刚刚将vb.net应用程序转换为c#,其中一行是从参数中获取@ReturnValue。

我最终还是要做很多事情......

有没有更简单的方法

这是我的

int rc = ((System.Data.SqlTypes.SqlInt32)(((System.Data.SqlClient.SqlParameter)(cmd.Parameters["@ReturnValue"])).SqlValue)).Value;

在vb.net中它就像这样简单

Dim rc As Integer = Convert.ToInt32(cmd.Parameters("@ReturnValue").Value)

很简单: - )

但是C#的问题是属性值不可用,除非我转换为SqlParameter并且我还需要转换为Sqltypes.SqlInt32 - 我不能只做一个标准的Convert.ToInt32

2 个答案:

答案 0 :(得分:3)

这不是C#与VB.NET的关系 - 它是关于您用来声明变量的类型。如果cmdIDbCommand,那么您需要进行大量投射。

IDbCommand.Parameters属性返回IDataParametersCollection,其中包含一组Object实例。由于Object没有名为Value的属性,因此您需要在访问Value之前将每个实例强制转换为SqlParameter

相比之下,

SqlCommand.ParametersSqlParameterCollection,其中包含SqlParameter个实例的集合。如果您将cmd变量声明为SqlCommand,则可以按照您习以为常的直接方式访问其参数值。 (代价是与SqlClient命名空间中的实现紧密耦合。)

答案 1 :(得分:2)

在C#中执行它同样容易:

int rc = (int) cmd.Parameters("@ReturnValue").Value;