首页 新闻 会员 周边 捐助

asp.net在什么情况下会出现 DBNull 错误

0
悬赏园豆:10 [已解决问题] 解决于 2013-07-18 22:10

有时候开发的时候会出现DBnull 无法转换成string类型。

今天我特意做了个测试:

<%
System.Data.DataTable dt;
DbHelperSQL dbhelper = new DbHelperSQL();
string sql = "select top 10 wentou from tbInfor";
System.Data.SqlClient.SqlDataReader sdr = dbhelper.ExecuteReader(sql);
while(sdr.Read()){
string p = sdr["wentou"].ToString();
%>
<li>
<%=p%>

</li>
<%} %>
</ul>

这上面我用了DATATABLE和SqlDataReader  而且select top 10 wentou from tbInfor这个在数据库里面全部是null值,可是这次就是没报错~ 奇怪了!

请问在什么情况下会出现dbnull

hamigua的主页 hamigua | 初学一级 | 园豆:4
提问于:2013-07-18 21:34
< >
分享
最佳答案
0

你数据库存了null查出来就是dbnull了。。。DataReader和Convert类上的有开方法检查是否为dbnull类型 

收获园豆:10
滴答的雨 | 老鸟四级 |园豆:3660 | 2013-07-18 21:42

恩 我试了试只有在convert转换情况下才会DBNULL  如果直接sdr["wentou"]或者sdr["wentou"].toString()是不会报错的!

hamigua | 园豆:4 (初学一级) | 2013-07-18 21:49

@hamigua: 我其实是想说DataReader和Convert类上有开方法判断是不是DBnull,然后你可以转化为你预定的默认值。。。sdr["wentou"].toString()不会报错,是因为dbnull重写了tostring()返回空

滴答的雨 | 园豆:3660 (老鸟四级) | 2013-07-18 22:02

@滴答的雨: 原来是toString重构了dbnull 好的。谢谢

hamigua | 园豆:4 (初学一级) | 2013-07-18 22:10
其他回答(1)
0

这样写就可以避开DBNull错误:

sdr["wentou"] as string;

或者

Convert.ToString(sdr["wentou"]);
dudu | 园豆:29568 (高人七级) | 2013-07-18 21:49

我发现如果数据库里面是(字符串字段)convert.Tostring是不会有问题的。但是如果是数字类型的,Convert.ToInt32会出现问题

支持(0) 反对(0) hamigua | 园豆:4 (初学一级) | 2013-07-18 21:53

@hamigua: Convert.ToInt32应该不会出问题,你可以试一下

支持(0) 反对(0) dudu | 园豆:29568 (高人七级) | 2013-07-18 21:57

@dudu: 试过了会的,比如一个字段是pid 然后这个pid 是null  我把这个pid 读出来 int p=convert.ToInt32(sdr["pdi"]);是报错的

支持(0) 反对(0) hamigua | 园豆:4 (初学一级) | 2013-07-18 22:01

@hamigua: 不好意思,是我记错了。也许这么设计是考虑到数据库中Int型的列不应该存在NULL值

支持(0) 反对(0) dudu | 园豆:29568 (高人七级) | 2013-07-18 22:48
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册