亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定

為什么new MySqlParameter("@val", 0).Value == null?

標簽:
MySQL


前阵子同事写代码时发现MySQL数据表中经常被神奇的插入了空值,跟踪了半天代码,终于发现了问题所在:

DbParameter p = new MySqlParameter("@val", 0); 

Debug.Assert(p.Value == 0);  // 这里断言失败,p.Value实际是null 

分析了半天,没找到原因。猜想是MySql.Data把0当作null来处理了。心想,这不应该啊,完全没理由的事情啊,0在数据库里是个多么正常不过的值啊!心有不甘,于是把MySql.Data的源代码下载下来调试跟踪……然后发现了一个不得了的事情

MySqlParameter有几个构建函数,其中有两个是这么申明的

public MySqlParameter(string name, object value) { 

    // ...... 

 

public MySqlParameter(string name, MySqlDbType type) { 

    // ...... 

    // MySqlDbType是个枚举类型 

p = new MySqlParameter("@val", 0)实际是调用的是第二个构建函数,0被转换成MySqlDbType.Decimal传进去了,没有为其Value赋值,理所当然的p.Value为null。

那么,岂不是传入的整数都会被当作枚举……不然,如果传入的非0,调用的却又是第一个构建函数,1是被当作object来处理的!

然后我很疑惑,为什么0会被自动转成枚举类型来处理,而非0则会被当作object呢?为什么为什么为什么?谁能告诉我答案?

疑惑归疑惑,问题是解决了……

DbParameter p = new MySqlParameter("@val", (object) 0); 

Debug.Assert(p.Value == 0);  // 断言成功 

 

©著作权归作者所有:来自51CTO博客作者边城__的原创作品,如需转载,请注明出处,否则将追究法律责任

object 枚举类型转换C#


點擊查看更多內容
TA 點贊

若覺得本文不錯,就分享一下吧!

評論

作者其他優質文章

正在加載中
  • 推薦
  • 評論
  • 收藏
  • 共同學習,寫下你的評論
感謝您的支持,我會繼續努力的~
掃碼打賞,你說多少就多少
贊賞金額會直接到老師賬戶
支付方式
打開微信掃一掃,即可進行掃碼打賞哦
今天注冊有機會得

100積分直接送

付費專欄免費學

大額優惠券免費領

立即參與 放棄機會
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號

舉報

0/150
提交
取消