DataTable Rows Count Null 异常

DataTable Rows Count Null Exception

提问人:Marijn Ploeg 提问时间:12/11/2019 最后编辑:Marijn Ploeg 更新时间:12/11/2019 访问量:2409

问:

我试图用数据库中的数据填充列表视图,但在加载列表视图时出现空引用异常。我使用 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;
        }
C# SQL-Server NullReferenceException

评论

2赞 Crowcoder 12/11/2019
这回答了你的问题吗?什么是 NullReferenceException,如何修复它?
0赞 SMor 12/11/2019
您对 ExecuteNonQuery 的期望究竟是什么?它不会返回适配器要读取的行。数据集为空,尝试访问第一个表会导致错误。

答:

0赞 Developer 12/11/2019 #1

您正在尝试使用空值。这意味着您要么将其设置为 null,要么根本不将其设置为任何内容。 现在,您可以在每个找到的位置放置一个断点,并在附加调试器的情况下运行程序。每次调试器在此类断点中断时,都需要确定是否期望引用为非 null。

1赞 bimal george 12/11/2019 #2

检查dataTable是否为null

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);
    }
}

评论

0赞 Crowcoder 12/11/2019
我敢打赌,例外是接收到一个长度为零的数组。ExecuteSelectQuery
0赞 Marijn Ploeg 12/11/2019
我有一个带有 ExecuteSelectQuery 的基类,我将我的 DateTable 方法添加到上面的问题中
1赞 JJ Raj 12/11/2019 #3

检查是否是...datarows.countnull

此外,在提到字符串、sql 命令类型和 datareader 以及所有...首先确保数据在此函数 o/p 中返回。DB_Get_All_MenuItems()dbconnction