今天遇到一个奇怪问题,运行下边的代码,在一些特殊情况下会,报错:异常信息:输入字符串的格式不正确。
不知道什么原因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