asp.net中DBNull,Null,string.empty的异同

做一Asp.Net网站登录模块,要求用户输入用户名和密码登录,再在后台程序中调用一存储过程来判断数据库中是否存在该用户,如果不存在,则返回一空值Null。由于后台数据库是SQL的,返回的空值是SQL类型的,因此在网站后台程序中混淆了其与Null的关系。通过查找资料,明白了DBNull、Null和空字符串的异同。

1.DBNull的解释:     该类用于指示不存在某个已知值(通常在数据库应用程序中)。         在数据库应用程序中,空对象是字段的有效值。该类区分空值(空对象)和未初始化值(DBNull.Value   实例)。例如,表可以包含具有未初始化字段的记录。默认情况下,这些未初始化字段具有DBNul值。         该类还可以用于在COM Interop中区分VT_NULL变量(与空对象关联)和VT_EMPTY变量(与DBNull.Value实例关联)。         DBNull从不等于任何值。         DBNull是一个单独的类,这意味着该类只能存在一个实例。这个唯一的实例是DBNull.Value       访问SQL数据库的数据密集应用程序必须使用System.Data.SqlTypes类,这些类对空值具有内在支持。

2.  Null     null 关键字是表示不引用任何对象的空引用的文字值。null 是引用类型变量的默认值。那么也只有引用型的变量可以为NULL,如果 int i=null,的话,是不可以的,因为Int是值类型的。     "null" means the object reference is invalid in .NET,when you retrieve a NULL value from the Database, it is a valid value to .NET, and it is represented by System.DBNull.Value     null用于判断Reference invalidate

3.""和String.Empty
这两个都是表示空字符串,其中有一个重点是string str1="" 和 string str2=null 的区别,这样定义后,str1是一个空字符串,空字符串是一个特殊的字符串,只不过这个字符串的值为空,在内存中是有准确的指向的,string str2=null,这样定义后,只是定义了一个string 类的引用,str2并没有指向任何地方,在使用前如果不实例化的话,都将报错。 (String.Empty就是"",这是在String类的静态构造函数中定义的     并且注意,由于CLR的string   interning的作用,String.Empty和""完全指向同一片内存区域,不会每次""都出现一个新的字符串引用)
 4.Convert.IsDBNull()
    Convert.IsDBNull()返回有关指定对象是否为 DBNull 类型的指示,即是用来判断对象是否为DBNULL的。其返回值是True或Flase。

那么,如何判断存储过程返回的值是DBNull呢? 我是这样做的:

        if (Convert.IsDBNull(MyCommnd.Parameters["@xxxxx"].Value))         {             xxx....;         }         else         {             xxx...         }

或者

       if (MyCommnd.Parameters["@xxxxx"].Value==DBNull.Value)         {            xxxx....         }         else         {             xxxx....         }

其中MyCommand为打开存储过程的SqlCommand,@xxxxx为MyCommand的输出参数

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值