簡體   English   中英

數據表行計數空異常

[英]DataTable Rows Count Null Exception

我試圖用我的數據庫中的數據填充列表視圖,但在加載列表視圖時出現空引用異常。 我使用 MVC 模式。

我的數據訪問層中的代碼:

public List<Menu_Item> DB_Get_All_MenuItems()
{
    string query = "SELECT * FROM [Menu_Items]";
    SqlParameter[] sqlParameters = new SqlParameter[0];
    return ReadTables(ExecuteSelectQuery(query, sqlParameters));
}

private List<Menu_Item> ReadTables(DataTable dataTable)
{
    List<Menu_Item> menu_items = new List<Menu_Item>();
    foreach (DataRow dr in dataTable.Rows)
    {
        Menu_Item menu_Item = new Menu_Item()
        {
            Menu_ID = (int)dr["Menu_ID"],
            Naam = (string)dr["Naam"],
            Prijs = (float)dr["Prijs"],
            Voorraad = (int)dr["Voorraad"],
            Categorie_ID = (int)dr["Catogorie_ID"]

        };
        menu_items.Add(menu_Item);
    }
    return menu_items;
}

我已經檢查過,我的 SQL 參數都拼寫正確

確切的錯誤是:datatable.rows = 'datatable.rows' 拋出了類型為 'system.nullreferenceexception' 的異常

我的 DateTable 方法看起來像這樣

protected DataTable ExecuteSelectQuery(string query, params SqlParameter[] sqlParameters)
        {
            SqlCommand command = new SqlCommand();
            DataTable dataTable;
            DataSet dataSet = new DataSet();

            try
            {
                command.Connection = OpenConnection();
                command.CommandText = query;
                command.Parameters.AddRange(sqlParameters);
                command.ExecuteNonQuery();
                adapter.SelectCommand = command;
                adapter.Fill(dataSet);
                dataTable = dataSet.Tables[0];
            }
            catch (SqlException e)
            {
                return null;
                throw new Exception(e.ToString());
            }
            finally
            {
                CloseConnection();
            }
            return dataTable;
        }

檢查數據表是否為空

if(dataTable!=null && dataTable.Rows.Count > 0)
{
foreach (DataRow dr in dataTable.Rows)
    {
        Menu_Item menu_Item = new Menu_Item()
        {
            Menu_ID = (int)dr["Menu_ID"],
            Naam = (string)dr["Naam"],
            Prijs = (float)dr["Prijs"],
            Voorraad = (int)dr["Voorraad"],
            Categorie_ID = (int)dr["Catogorie_ID"]

        };
        menu_items.Add(menu_Item);
    }
}

檢查datarows.count是否為null ...

同樣在DB_Get_All_MenuItems()提到dbconnction字符串、sql 命令類型和 datareader 以及所有...首先確保數據在此函數中返回 o/p....

您正在嘗試使用空值。 這意味着您要么將其設置為 null,要么根本不將其設置為任何內容。 現在,您可以在每個找到的位置放置一個斷點,並在連接調試器的情況下運行您的程序。 每次調試器在這樣的斷點處中斷時,您都需要確定您是否希望引用為非空。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM