今天遇到一個奇怪問題,運行下邊的代碼,在一些特殊情況下會,報錯:異常信息:輸入字符串的格式不正確。
不知道什么原因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
