new MySqlParameter("@val", 0).Value == null的异常
来源:互联网 发布:淘宝店铺三钻多少分 编辑:程序博客网 时间:2024/06/10 18:59
前阵子同事写代码时发现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); // 断言成功
0 0
- new MySqlParameter("@val", 0).Value == null的异常
- value和val()的区别
- jquery val() 和 value 的区别
- jQuery attr("value") 和 val的区别
- jQuery中val和value的区别
- this.value和$(this).val()的区别
- val()和.value的区别和用法
- Android Studio build工程的时候出现 Error:null value in entry: aaptFriendlyManifestOutputFile=null
- new 出一个对象 和 = null的区别
- new 一个空的数组对象和a[0]=null的区别
- Error:null value in entry: aaptFriendlyManifestOutputFile=null
- Error:null value in entry: incrementalFolder=null
- Android Studio null value in entry: sourceOutputDir=null
- 解决Error:null value in entry: incrementalFolder=null
- Error:null value in entry: incrementalFolder=null
- Gradle报错: null value in entry:libOutPutDir=null?
- 关于Error:null value in entry: aaptFriendlyManifestOutputFile=null
- CSS3的[att=val]选择器
- Solr文档 (官方资料)
- printf的时候打印%号
- asp.net 六大对象之Request、Response
- 还原sql2008数据库提示数据库正在使用
- scrollView中放满button,无法滑动
- new MySqlParameter("@val", 0).Value == null的异常
- UML类图关系
- jQuery源码分析-10事件处理-Event-概述和基础知识
- jQuery中$(function()与(function($)的区别
- js: object2string string2object string2json
- AndroidManifest.xml配置文件详解
- 批处理(bat)脚本语言(4) - FOR循环
- ios 获取系统联系人 qq 微博 等
- 问题及代码