我创建了一个学生信息查询的窗体,然后在窗体中加入了ListView控件,用来显示查询得到的学生各项信息,其中有以下几列要显示
学生姓名、学号,学生性别、学生年龄、学生住址、Email我的数据库中的设置是学生地址和邮箱是可以为NULL的,
现在就出现了一个问题,在我执行完查询语句后,在给每个变量赋值的时候,出现只要其中有一列为NULL的话,程序就报错,例如:
要查询一个名叫张瑞龙的同学的信息,但是这时这个学生的地址为NULL,当为他的地址赋值时就会出错,
代码如下:
//声明变量
string studentName;
string code;
string sex;
string age;
string address;
string email;
//创建SQL语句
 string sql = string.format("SELECT StudentName,Code,Sex,Age,Address,Email FROM Students WHERE StudentName LIKE '张瑞龙'");
//创建Command对象
                SqlCommand command = new SqlCommand(sql, DBHelper.connection);
                SqlDataReader dataReader;                    //定义一个DataReader对象
                DBHelper.connection.Open();                  //打开数据库连接
                dataReader = command.ExecuteReader();     //执行查询命令
//为变量赋值
while(dataReader.Read())
{
    string studentName = (string)dataReader["StudentName"];
    ……
    string address = (string)dataReader["Address"];   //程序运行到此报错,如果数据库中的地址改为不为NULL,就不报错了,我想问下怎么修改,哪里错了}

解决方案 »

  1.   

    你先判断一下数据库中得到的值是否为空
    如果为空就给个空字符
    不为空就从数据库中取出来
    string address="";
    if(null==dataReader["Address"])
    {
        address=" ";
    }
    else
    {
        address = (string)dataReader["Address"];
    }
      

  2.   

    string address =(dataReader["Address"] == null || dataReader["Address"] == DBNull.Value) ? string.Empty : (string)dataReader["Address"];
    这样是否更好一点
      

  3.   

    可能是你从数据库中读取的时候哪里出了点小问题,然后导致Address 为空值,所以报错嘛、÷可依楼上的,判断是否为空,然后赋值!
      

  4.   

     
    判断时将Null放在前面好像就不会报空指针异常
    string address =(null == dataReader["Address"]||DBNull.Value== dataReader["Address"]) ? string.Empty : (string)dataReader["Address"];
    这样可能好些
      

  5.   

    同志们,为各位的努力鼓个掌,赞一个~~
    不过这个问题不用那么麻烦,string address = dataReader["Address"] + ""; 就可以了
      

  6.   

    string address =Convert.IsDBNull(dataReader["Address"])?"":dataReader["Address"].ToString();
    来判断这个字段是否为空
      

  7.   


    select isnull(address,'') as address从源头控制