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語句中都是判斷不為空的,我這個代碼里是判斷為空的,因為要進行數值相加,讀者請自行更改


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM