加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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

发布时间:2020-12-16 01:36:47 所属栏目:百科 来源:网络整理
导读:我有一个方法,可以在DB(SQL Server)中添加或更新记录,并将RecordID作为(Int32)输出参数返回,成功/失败结果返回为(Int32)返回值. 鉴于我正在指定这些参数的类型,为什么我必须在返回它们时将它们强制转换? 我希望使用以下内容: enquiryID = cmd.Parameters["
我有一个方法,可以在DB(SQL Server)中添加或更新记录,并将RecordID作为(Int32)输出参数返回,成功/失败结果返回为(Int32)返回值.

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

我希望使用以下内容:

enquiryID = cmd.Parameters["@EnquiryID"].Value;

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

enquiryID = Int32.Parse(cmd.Parameters["@EnquiryID"].Value.ToString());

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

更新:

好的,我确信 – 直接投射FTW:(int)cmd.Parameters [“@ EnquiryID”].值

解决方法

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

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

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读