有时候开发的时候会出现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
你数据库存了null查出来就是dbnull了。。。DataReader和Convert类上的有开方法检查是否为dbnull类型
恩 我试了试只有在convert转换情况下才会DBNULL 如果直接sdr["wentou"]或者sdr["wentou"].toString()是不会报错的!
@hamigua: 我其实是想说DataReader和Convert类上有开方法判断是不是DBnull,然后你可以转化为你预定的默认值。。。sdr["wentou"].toString()不会报错,是因为dbnull重写了tostring()返回空
@滴答的雨: 原来是toString重构了dbnull 好的。谢谢
这样写就可以避开DBNull错误:
sdr["wentou"] as string;
或者
Convert.ToString(sdr["wentou"]);
我发现如果数据库里面是(字符串字段)convert.Tostring是不会有问题的。但是如果是数字类型的,Convert.ToInt32会出现问题
@hamigua: Convert.ToInt32应该不会出问题,你可以试一下
@dudu: 试过了会的,比如一个字段是pid 然后这个pid 是null 我把这个pid 读出来 int p=convert.ToInt32(sdr["pdi"]);是报错的
@hamigua: 不好意思,是我记错了。也许这么设计是考虑到数据库中Int型的列不应该存在NULL值