为什么我必须为SQL查询转换返回参数值?

CJM*_*CJM 3 c# sql-server parameters casting return-value

我有一个方法,可以在DB(SQL Server)中添加或更新记录,并将RecordID作为(Int32)输出参数返回,成功/失败结果返回为(Int32)返回值.

鉴于我正在指定这些参数的类型,为什么我必须在返回它们时将它们强制转换?

我希望使用以下内容:

enquiryID = cmd.Parameters["@EnquiryID"].Value;
Run Code Online (Sandbox Code Playgroud)

...但我不得不跳过几个额外的篮球:

enquiryID = Int32.Parse(cmd.Parameters["@EnquiryID"].Value.ToString());
Run Code Online (Sandbox Code Playgroud)

这不是世界末日,但它似乎只是一个漫长的解决方案.为什么Parameters.Value返回SqlParameters.Value对象而不是Int32?

更新:

好吧,我确信 - 直接铸造FTW: (int)cmd.Parameters["@EnquiryID"].Value

Dan*_*ain 5

SQL Server没有指定它返回的数据类型,因此C#在处理之前无法推断出类型.此外,SqlParamater是通用的,因此它传递和传递来自SQL Server.SQL Server正在执行强制转换.

另外,Int32.Parse(cmd.Parameters["@EnquiryID"].Value.ToString())如果你知道它总是一个int,你可以直接演员,而不是使用它(int)cmd.Parameters["@EnquiryID"].Value.如果值可能返回为null,则可以添加

object value = cmd.Parameters["@EnquiryID"].Value;
if(!value.Equals(DBNull.Value)
    enquiryID = (int)value;
Run Code Online (Sandbox Code Playgroud)

  • 这可能最终会优于一堆if语句`int value = value.Equals(DBNull.Value)?null:(int)value`您也可以设置默认值,而不是null (2认同)