VerySource

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 1941|回复: 8

难道用IDataReader读数据时,数据不能为空吗?

[复制链接]

2

主题

8

帖子

6.00

积分

新手上路

Rank: 1

积分
6.00
发表于 2021-4-22 16:00:01 | 显示全部楼层 |阅读模式
我发现有些字段为空它就会出现:Data is Null. This method or property cannot be called on Null values.
这样的错误!不知道你们的怎么样?
回复

使用道具 举报

0

主题

110

帖子

63.00

积分

新手上路

Rank: 1

积分
63.00
发表于 2021-4-22 16:30:02 | 显示全部楼层
为空也可以读,把你的代码贴出来看下..
回复

使用道具 举报

2

主题

8

帖子

6.00

积分

新手上路

Rank: 1

积分
6.00
 楼主| 发表于 2021-4-22 18:30:02 | 显示全部楼层
省略一部分,代码很多,把读的这部分贴出来.

using (IDataReader rdr = db.ExecuteReader(dbCommand, transaction))
                {
                    while (rdr.Read())
                    {
                        CSInfo cs = new CSInfo(rdr.GetInt32(0), rdr.GetString(1), rdr.GetInt32(2)  );
                        css.Add(cs);
                    }
                }
回复

使用道具 举报

0

主题

110

帖子

63.00

积分

新手上路

Rank: 1

积分
63.00
发表于 2021-4-22 22:45:01 | 显示全部楼层
是不是因为你读出来的记录中,某个字段为空,如果为空,又怎么能"rdr.GetInt32(0).."呢?
回复

使用道具 举报

0

主题

110

帖子

63.00

积分

新手上路

Rank: 1

积分
63.00
发表于 2021-4-22 23:00:01 | 显示全部楼层
先作个判断,如果为空,给个默认值:

try..

            CSInfo cs = new CSInfo((rdr.IsDBNull(0)) ? 0 : (rdr.GetInt32(0)), (rdr.IsDBNull(1)) ? "" : (rdr.GetString(1)), (rdr.IsDBNull(2)) ? 0 : (rdr.GetInt32(2)));
回复

使用道具 举报

2

主题

8

帖子

6.00

积分

新手上路

Rank: 1

积分
6.00
 楼主| 发表于 2021-4-22 23:15:01 | 显示全部楼层
请问什么叫"某个字段为空"?谢谢
回复

使用道具 举报

0

主题

110

帖子

63.00

积分

新手上路

Rank: 1

积分
63.00
发表于 2021-4-22 23:45:01 | 显示全部楼层
比如说一个student表,有三个字段(sno,sname,sage)

其中有一条记录

sno   sname  sage
111   null    21

if(rdr.Read())
{
    if(rdr.IsDBNull(1))
    {
        //这条记录不为空,但是记录中的sname字段是null..
        //这时候如果用rdr.GetString(1)就会有错误,因为null不能转成string..
    }
}


不知道是不是说清楚了..
回复

使用道具 举报

2

主题

8

帖子

6.00

积分

新手上路

Rank: 1

积分
6.00
 楼主| 发表于 2021-4-23 00:15:01 | 显示全部楼层
谢谢,明白了.
有没有更好的方法实现这个判断?因为我有很多字段,这样写真的是太费时了.
回复

使用道具 举报

0

主题

1

帖子

2.00

积分

新手上路

Rank: 1

积分
2.00
发表于 2021-4-23 16:15:02 | 显示全部楼层
楼主不要用 rdr.GetString()等方法 读取IDataReader的值。

换用  rdr[0].ToString()  
    或列名 rdr["name"].ToString() 就可以读取空值了。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|CopyRight © 2008-2023|verysource.com ( 京ICP备17048824号-1 )

快速回复 返回顶部 返回列表