http://blog.csdn.net/txx9010/article/details/7710739
来源:互联网 发布:mysql字段约束 编辑:程序博客网 时间:2024/05/21 08:02
最近在开发过程中遇到返回类型为Object问题,将数据库中用ExecuteScalar查询出来的数据直接==NULL时,报未找到实例异常。
经过一番查找,终于搞清原因!
(1)先了解几个与空类型相关的关键字和对象
Null: 关键字表示不引用任何对象的空引用,它是所有引用类型变量的默认值,在2.0版本之前也就只有引用变量类型可以为null,如(string a=null)但在c# 2.0版本之后,Net也引入了可以为Null的值类型,但变量在定义的时候方式有所不同,如:int ? a=null。详细看http://msdn.microsoft.com/zh-cn/library/1t3y8s4s.aspx。不在内存中开辟内存地址,可用于引用是否可用。
DBNULL:是一个唯一类,也就是说这种类型的实例只有一个,即DBNull.Value。主要用来指示数据库中的字段值为空(null)时在.Net中映射的值,另外还可以用于在 COM Interop 中区分 VT_NULL变量(与空对象关联)和 VT_EMPTY变量(与 DBNull.Value 实例关联)。详细看http://msdn.microsoft.com/zh-cn/library/system.dbnull%28v=vs.80%29.aspx。它应该有固定不变的内存。
String.Empty和"":这两个都表示空字符串,空字符串是一个特殊的字符串,所以它依然是一个字符串实例,也就是说它在内存中依然分配了明确的地址。
Convert.IsDBNull():返回有关指定对象是否为 DBNull 类型的指示。即是用来判断对象是否为DBNULL的。其返回值是True或Flase。主要用于和数据库操作相关的值判断。
(2)各种的使用方法和效率
对象的判断:使用Null可用于任何引用变量是否为空的判断,是最基本的对象为空判断方式,在和数据库相关的操作中使用Object.Equals(obj, System.DBNull.Value)或者
Convert.IsDBNUll。
字符串判断:string在C#中也是一个引用类型,但其又具有一定的特殊性。我们在使用string时,往往会把“变量值为空的字符串对象”和“变量值为空字符的字符串对象”搞混。所以经常会因为对此理解不深引起好多问题,因为string是我们开发过程使用最频繁的类型之一,对于字符串的判断方法,通过对网上资料的整理和自己的实际操作经验现总结如下:
string str
1:string.IsNullOrEmpty== str 这种方法是我最喜欢用的,它不但一次性能判断"空的字符串变量",还能判断“值为空字符串的变量”,并且还可以让代码简洁美观。判断的效率也不算低。
2:str.Length == 0这种方式,我不怎么喜欢用,不推荐使用。在网上看和自己的实际测试,确实能证明这种判断方式的执行效率最高,但要使用它你必须保证字符串不null,如果
为null就会报出异常,
3. str == string.Empty或 str == ""这两种方式,我也不推荐使用,他只能判断“值为空字符串”的字符串变量,而且效率比较低
4. str == null这种方式我也不怎么推荐,原因和3一样。
- http://blog.csdn.net/txx9010/article/details/7710739
- http://blog.csdn.net/IBM_hoojo/article/details/5688947
- http://blog.csdn.net/chenlaic/article/details/6143235
- http://blog.csdn.net/eaglewood2005/article/details/4335052
- http://blog.csdn.net/mchp/article/details/3995970
- http://blog.csdn.net/v_july_v/article/details/6015165
- http://blog.csdn.net/masterz/article/details/6232585
- http://blog.csdn.net/perfectpdl/article/details/6442847
- http://blog.csdn.net/eroswang/article/details/1967243
- http://blog.csdn.net/zhvsby/article/details/5986645
- http://blog.csdn.net/dz45693/article/details/6183645
- http://blog.csdn.net/david_lv/article/details/5798003
- http://blog.csdn.net/zxingchao2009/article/details/6299313
- http://blog.csdn.net/zhanxinhang/article/details/6783766
- http://blog.csdn.net/ruanruoshi/article/details/935510
- http://blog.csdn.net/yming0221/article/details/6538527
- http://blog.csdn.net/yming0221/article/details/6528490
- http://blog.csdn.net/yming0221/article/details/6704079
- 区别documen.write和 innerHTML
- 【关于适配】华为手机PopupWindow弹出时背景不变暗 或者 华为手机PopupWindow背景一闪一闪问题处理
- hibernate 如何使用oracle 数据库 默认值(sysdate)
- Kafka设计解析(一)- Kafka背景及架构介绍
- dataTables去掉搜索框和每页多少条框体,解决Cannot reinitialise DataTable问题
- http://blog.csdn.net/txx9010/article/details/7710739
- 罗马尼亚度假问题和N皇后问题
- Linux添加共享库路径
- iOS App 中,需要绑定微博、Twitter、Flickr 等第三方平台账号时,用 OAuth 授权
- ajax post与get
- sql 查询某一字段包含特定字符的数量
- MessageBox用法大全
- POJ 3206 Borg Maze(bfs+prim)
- 区别call() 和 .apply()