我刚刚将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
答案 0 :(得分:3)
这不是C#与VB.NET的关系 - 它是关于您用来声明变量的类型。如果cmd
是IDbCommand
,那么您需要进行大量投射。
IDbCommand.Parameters
属性返回IDataParametersCollection
,其中包含一组Object实例。由于Object没有名为Value
的属性,因此您需要在访问Value之前将每个实例强制转换为SqlParameter
。
SqlCommand.Parameters
是SqlParameterCollection
,其中包含SqlParameter
个实例的集合。如果您将cmd
变量声明为SqlCommand
,则可以按照您习以为常的直接方式访问其参数值。 (代价是与SqlClient命名空间中的实现紧密耦合。)
答案 1 :(得分:2)
在C#中执行它同样容易:
int rc = (int) cmd.Parameters("@ReturnValue").Value;