首页 > 编程 > .NET > 正文

.NET和SQL Server中"空值"辨析

2024-07-10 13:01:40
字体:
来源:转载
供稿:网友
国内最大的酷站演示中心!
初学数据库编程我们可能会有一些对“空值”的疑问,比如通过编程新建的一个表中所有数据皆显示为<null>,手动添加并删除文字后又变成了空白;一个字符串类型的字段,明明没有填值,却不等于"";用ado.net从数据库中取值,每遇到有<null>的就出错……这需要我们正确认识.net和sql server中几种不同的“空值”。1、真正的空值,也就是“没有输入的值”,可以出现在大多数类型的字段中(如果没有别的约束条件),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或其它自定义的有意义的值。 2、空字符串(零长度字符串),只出现在字符串类型(如nvarchar)的字段中,sql server中表示为'',显示为空白,手工在sql server企业管理器中输入时清空一个单元格即可。它在.net中对应system.string.empty,也就是我们常用的""。在t-sql命令中处理空字符串和处理一般的字符串没什么区别。用ado.net从数据库得到的空字符串也和一般的字符串没什么区别。 相关的概念还有vb.net中的nothing和对应于c#.net中的null(注意这个null是c#.net中的null而非sql server中null),它们在.net中是表示不引用任何对象的空引用的值,在传入sql server时,根据不同的上下文环境,可能存为真正的空值(比如在更新一个字符串类型的字段值时),也可能调用在sql server中自定义的默认值(比如传给一个有默认值的存储过程参数),也可能因为无法进行类型转换而引发.net异常。因此在用ado.net向sql server中存储数据时要慎用nothing。
发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表