zoukankan      html  css  js  c++  java
  • C# 数据为空,不能对NULL调用此方法或属性的解决办法

    在运行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语句中都是判断不为空的,我这个代码里是判断为空的,因为要进行数值相加,读者请自行更改

  • 相关阅读:
    点击表单提交 却打开了另存为对话框
    js中对象的复制,浅复制(浅拷贝)和深复制(深拷贝)
    html怎么隐藏input标签
    莫名其妙地改变了数组的值,原来是……
    addEventListener 用法
    JavaScript DOM元素常见操作详解【添加、删除、修改等】
    MySQL用户权限验证与管理方法详解
    mysql如何修改root用户的密码
    python案例
    IDEA启动报 Error:java: JDK isn't specified for module 'xxx' 已解决
  • 原文地址:https://www.cnblogs.com/z12568/p/9979187.html
Copyright © 2011-2022 走看看