C#判断dataset数据集字段为NULL或为空

今天遇到一个奇怪问题,运行下边的代码,在一些特殊情况下会,报错:异常信息:输入字符串的格式不正确。

不知道什么原因dt.Rows[i]["SumPages"]字段为null时, dt.Rows[i]["SumPages"].ToString() == null的值还是false,因此会接着执行Convert.ToInt32(dt.Rows[i]["SumPages"].ToString())这句代码,因此会报错。

            DataSet ds = new DataSet();
            ds = DbHelperOra.Query(sb.ToString());
       int sumPages=0;
if (ds.Tables[0].Rows.Count > 0) { DataTable dt = ds.Tables[0]; for (int i = 0; i < dt.Rows.Count; i++) {              sumPages= dt.Rows[i]["SumPages"].ToString() == null ? 0 : Convert.ToInt32(dt.Rows[i]["SumPages"].ToString()); } }

也许该条记录的dt.Rows[i]["SumPages"]字段并不为null,只是看着像null而已,所以才会出现这种情况。也许字段里是空的字符串。

将判断字段是否为空的语句改成下边的代码,就不会再有问题

sumPages=string.IsNullOrEmpty(dt.Rows[i]["SumPages"].ToString()) ? 0 : Convert.ToInt32(dt.Rows[i]["SumPages"].ToString());

或者

sumPages = dt.Rows[i]["SumPages"] == DBNull.Value ? 0 : Convert.ToInt32(dt.Rows[i]["SumPages"].ToString());

再或者改查询SQL语句

select nvl(sum(filed1),0) as SumPages from tableTest  

原文地址:https://www.cnblogs.com/hanguoshun/p/12894649.html