在运行C#项目时,报出了以下错误,错误原因是数据库中的值为null时,查询时会触发该错误提示
部分源代码如下:
public List<Student> findData2()
{
float shouru = 0; //收入
float zhichu = 0; //支出
float yingli = 0; //盈利
string sql = "select a.GoodsID,b.SellID,a.GoodsName,a.NeedPay,a.HasPay,b.NeedPay,b.HasPay from dbo.tb_Goods a left join dbo.tb_Sell b on a.GoodsID=b.GoodsID;"; //左外连接部分列查询
// MessageBox.Show(sql);
SqlCommand cmd = new SqlCommand(sql, conn);
List<Student> list = new List<Student>();
SqlDataReader reader = cmd.ExecuteReader();
{
while (reader.Read())
{
if (reader.IsDBNull(6)) //判断为空,则数值不变
{
shouru = shouru + 0;
}
else
{
shouru = shouru + float.Parse(Convert.ToString(reader.GetValue(6))); //不为空,则进行类型转换后数值相加
}
if (reader.IsDBNull(4))
{
zhichu = zhichu +0;
}
else
{
zhichu = zhichu + float.Parse(Convert.ToString(reader.GetValue(4)));
}
if (reader.IsDBNull(6))
{
yingli = yingli + float.Parse(Convert.ToString(reader.GetValue(4))) - float.Parse(Convert.ToString(reader.GetValue(3))) + 0;
}
else
{
yingli = yingli + float.Parse(Convert.ToString(reader.GetValue(4))) - float.Parse(Convert.ToString(reader.GetValue(3))) + float.Parse(Convert.ToString(reader.GetValue(6))) - float.Parse(Convert.ToString(reader.GetValue(5)));
}
// MessageBox.Show(Convert.ToString(yingli));
Student st = new Student(Convert.ToString(reader.GetString(0)), Convert.ToString(reader.GetValue(1)), Convert.ToString(reader.GetValue(2)), Convert.ToString(reader.GetValue(3)), Convert.ToString(reader.GetValue(4)), Convert.ToString(reader.GetValue(5)), Convert.ToString(reader.GetValue(6)));
list.Add(st);
}
}
return list;
}
这个代码是从数据库实现左外连接的部分列查询显示,输出的表格中有7个列,对应reader.GetValue(0))到reader.GetValue(6))
长话短说,解决办法就是
将reader.GetValue(4)
改为Convert.ToString(reader.GetValue(4))
由于我还将Convert.ToString(reader.GetValue(4))进行了float类型的数据转换,所以看着更加复杂一些
还有我参考网上进行了判空的if语句,不过网上的if语句中都是判断不为空的,我这个代码里是判断为空的,因为要进行数值相加,读者请自行更改 |