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