1.在开发时常常碰到需要判断从数据库中取的值是否为空的情况
如果字段类型为字符串类型我们可以用
string test=dt.Rows[i]["columnName"].ToString();
if(!string.IsNullOrEmpty(test))
但是如果字段类型不为字符串,这样判断可能会有问题,数据库中的某列值返回要么是列值,要么为DBNull,所以不管任何类型的字段我们都可以用
if(test!=DBNull.value)
if(Convert.IsDBNull(test))
进行判断
补充:
DBNull在DotNet是单独的一个类型,该类只能存在唯一的实例,DBNULL.Value,DBNull唯一作用是 可以表示数据库中的字符串,数字,或日期,为什么可以表示原因是DotNet储存这些数据的类(DataRow等)都是以 object 的形式来储存数据的。对于 DataRow , 它的 row[column] 返回的值永远不为 null , 要么就是具体的为column 的类型的值 。 要么就是 DBNull 。 所以 row[column].ToString() 这个写法永远不会在ToString那里发生NullReferenceException。DBNull 实现了 IConvertible 。 但是,除了 ToString 是正常的外,其他的ToXXX都会抛出不能转换的错误。
2.赋空值
有时候我们要对一个变量进行初始化,需要赋空值,常用的有两种:
string test=“”;
string test1=string.Empty;
这两个都是空字符串,但本质上却有很大的区别:""表示一个字符串,字符串为空值,在数据库中占有实际的存储空间,在内存中也有准确的指向;而string.Empty(null)只是定义了一个string类的引用,不占用存储空间,在内存中也没有具体的指向,这样定义后不能直接使用还需要实例化才可以。
3、接受的传参为空或者未定义
1、 // 判断是否有日期参数传入
if (!string.IsNullOrEmpty(Request.QueryString["sdate"]))
{
Response.Write("传入");
Response.Write(Request.QueryString["sdate"].ToString());
}
else {
Response.Write("没有传入");
}
2、
??运算符 空或未定义的话取右边值 否则取左边的 N??1
Request.QueryString["sdate"]??"";if (Request.QueryString["sdate"] != null )//不能 Request.QueryString["sdate"] !="" 会报错
{
Response.Write(Request.QueryString["sdate"].ToString());
}
接受传参最好的方式就是string para=Request.QueryString["sdate"]??""; 即使传过来的参数没有定义,也不会出错
注:request可以同时接受post和get的数据
reques.form可以接受post的数据
request.QueryString可以接受get的数据