首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 网站开发 > asp.net >

关于sqlreader取不了空值的有关问题

2011-12-30 
求助关于sqlreader取不了空值的问题首先,我想在我的程序中通过sqlreader来读取数据库中的数据然后用sqlrea

求助关于sqlreader取不了空值的问题
首先,我想在我的程序中通过sqlreader来读取数据库中的数据然后用sqlreader[i].getstring方法来填充我的新实例。具体代码如下:

    public   class   ColumnInfo
        {
                private   string   _id;
                private   string   _fid;
                private   int   _sort;
                private   DateTime   _time;
                private   int   _childsum;
                private   string   _name;
                private   string   _desc;
                private   int   _status;
 
                public   ColumnInfo()
                {
                        //
                        //   TODO:   在此处添加构造函数逻辑
                        //
                }
                public   ColumnInfo(string   id,   string   fid,   int   sort,   DateTime   time,   int   childsum,   string   name,   string   desc,
                                                    int   status)
                {
                        this._id   =   id;
                        this._fid   =   fid;
                        this._sort   =   sort;
                        this._time   =   time;
                        this._childsum   =   childsum;
                        this._name   =   name;
                        this._desc   =   desc;
                        this._status   =   status;
                }...这是部分代码

这里另外一个类的部分代码:
SqlDataReader   sdr   =   SQLHelper.ExecuteReader(SQLHelper.CONN_STRING,   CommandType.Text,   SQL_SELECT_COLUMN,   SParms)
  if   (sdr.Read())
{
return   new   ColumnInfo(sdr.getGuid(0).toString(),sdr.getGuid(1).toString(),sdr.getInt32(2),sdr.getDateTime(3),sdr.getInt32(4),   sdr.getString(5),   sdr.getString(6),sdr.getint32(7));
}
就这样,但是数据库有些字段是NULL,这时运行就会抛出异常“数据为空。不能对空值调用此方法或属性。”就是说sdr.get..方法对空值用不了。
于是我就想先判断数据库数据是否为空先:
string[]   str=new   string[7];
  if   (sdr[0]   ==   DBNull.Value)


                                                {
                                                        str[0]   =   null;
                                                }
                                                else
                                                {
                                                        str[0]   =   sdr.GetGuid(0).ToString()   ;
                                                }
但数据库里不是每个数据的类型都一样,也就是说我不能用循环来执行了,难道要每条数据字段都判断   吗?
那位大虾能帮忙给个好办法啊?小弟先谢了

[解决办法]
1. 如果用DataReader,可以考虑返回一个SqlDataReader对象
2. 如果用DataSet ,可以考虑返回一个DataRow

[解决办法]
修改SQL查询语句:
SELECT
CASE WHEN col1 IS NULL THEN ' ' ELSE col1 END,
CASE WHEN col2 IS NULL THEN ' ' ELSE col2 END,
......
FROM tab WHERE 1=1
[解决办法]
查询语句做处理,用isnull处理
[解决办法]
只能一个一个判断,除非你的ColumnInfo的构造函数中,不指名类型,全部用object类型.

热点排行