数据表行计数为空异常

时间:2019-12-11 12:20:38

标签: c# sql-server nullreferenceexception

我正在尝试用数据库中的数据填充列表视图,但是在加载列表视图时出现空引用异常。我正在使用MVC模式。

我的数据访问权限层中的代码:

SELECT s.zone,
       min(o.price
           * CASE o.currency
               WHEN 'EUR' THEN
                 1
               WHEN 'USD' THEN
                 .9
             END),
       max(o.price
           * CASE o.currency
               WHEN 'EUR' THEN
                 1
               WHEN 'USD' THEN
                 .9
             END)
       FROM offer o
            INNER JOIN space s
                       ON s.id_space = o.id_space
       WHERE s.type = 11
             AND o.sell = 'N'
       GROUP BY s.zone;

我已经检查过,并且我的SQL参数都拼写正确

确切的错误是:datatable.rows ='datatable.rows'引发了'system.nullreferenceexception'类型的异常

我的DateTable方法看起来像这样

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

3 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:0)

您正在尝试使用空值。这意味着您要么将其设置为null,要么根本不将其设置为任何东西。 现在,您可以在找到的每个位置放置一个断点,并在连接调试器的情况下运行程序。调试器每次在这样的 breakpoint 处中断时,您需要确定您是否希望引用为非null。

答案 2 :(得分:0)

检查datarows.count是否为null ...

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