.NET和SQL Server中“空值”辨析

初学数据库编程我们可能会有一些对“空值”的疑问,比如通过编程新建的一个表中所有数据皆显示为

1<null> ,手动添加并删除文字后又变成了空白;一个字符串类型的字段,明明没有填值,却不等于  ""  ;用  ADO.NET  从数据库中取值,每遇到有  <null> 的就出错……这需要我们正确认识  .NET  和  SQL Server  中几种不同的“空值”。 
2
31  、真正的空值,也就是“没有输入的值”,可以出现在大多数类型的字段中(如果没有别的约束条件),  SQL server  中表示为  null  ,显示为  <null> ,手工在  SQL server  企业管理器中输入的方法是按  Ctrl+0  。它在  .NET  中对应  System.DBNull.Value  。在  T-SQL  命令中,判断一个值是不是空值,要用“  is null  ”而不是“  = null  ”;处理空值有个  ISNULL  函数,它使用指定的值替换  null  。用  ADO.NET  从数据库得到的空值无法自动转化为空字符串或  Nothing  ,须手动检测:如果得到  System.DBNull.Value  ,则赋给数据对象  Nothing  或其它自定义的有意义的值。 
4
52  、空字符串(零长度字符串),只出现在字符串类型(如  nvarchar  )的字段中,  SQL server  中表示为  ''  ,显示为空白,手工在  SQL server  企业管理器中输入时清空一个单元格即可。它在  .NET  中对应  System.String.Empty  ,也就是我们常用的  ""  。在  T-SQL  命令中处理空字符串和处理一般的字符串没什么区别。用  ADO.NET  从数据库得到的空字符串也和一般的字符串没什么区别。 
6
7相关的概念还有  VB.NET  中的  Nothing  和对应于  C#.NET  中的  null  (注意这个  null  是  C#.NET  中的  null  而非  SQL Server  中  null  ),它们在  .NET  中是表示不引用任何对象的空引用的值,在传入  SQL server  时,根据不同的上下文环境,可能存为真正的空值(比如在更新一个字符串类型的字段值时),也可能调用在  SQL server  中自定义的默认值(比如传给一个有默认值的存储过程参数),也可能因为无法进行类型转换而引发  .NET  异常。因此在用  ADO.NET  向  SQL server  中存储数据时要慎用  Nothing  。</null></null></null>
Published At
Categories with Web编程
Tagged with
comments powered by Disqus