在DataRow,DataRowView,DataViewon上的foreach循环期间引发的异常

时间:2013-06-14 22:51:01

标签: c# ado.net nullreferenceexception

我正在使用以下代码生成有序列表。在负载测试期间刷新此页面时,此代码在行号73,106,108上创建例外。 菜单在开发和测试环境中创建。它在生产方面或在负载测试期间崩溃**

try
{
    dtDepartments = DB.GetDataSet("[dbo].[Departments]", AppLogic.CachingOn).Tables[0];
    dtCategories = DB.GetDataSet("[dbo].[Categories]", AppLogic.CachingOn).Tables[0];

    foreach (DataRow drDept in dtDepartments.Rows)
    {
        dtCategories.DefaultView.RowFilter = "[SEName] Like '" + drDept["SEName"].ToString() + "-%' And [ParentCategoryId] = 0";
        CategoryView = null;
        CategoryView = dtCategories.DefaultView;


        foreach (DataRowView CategoryRowView in CategoryView)
        {
            DataRow CategoryRow = CategoryRowView.Row;  \\line number 73

            dtCategories.DefaultView.RowFilter = "[SEName] Like '" + drDept["SEName"].ToString() + "-%' And [ParentCategoryId] = " + CategoryRow["CategoryID"].ToString();

            CategoryViewTwoCount = dtCategories.DefaultView.Count;

            CategoryViewTwo = null;
            if (CategoryViewTwoCount > 0)
            {
                CategoryViewTwo = dtCategories.DefaultView;
            }
            else
            {
            }

            if (CategoryViewTwoCount > 0)
            {
                foreach (DataRowView CategoryRowViewTwo in CategoryViewTwo)    \\line number 106
                {
                    DataRow CategoryRowTwo = CategoryRowViewTwo.Row;           \\line number 108
                }
            }
        }
    }

    TreeMenu = HTMLContents.ToString();

    if (CategoryViewTwo != null)
    {
        CategoryViewTwo = null;
    }
    if (CategoryView != null)
    {
       CategoryView = null;
    }

    HTMLContents = null;
    dtCategories.Dispose();
    dtDepartments.Dispose();
    dtCategories = null;
    dtDepartments = null;
}
catch (Exception ex)
{
    //Log for staging
    //AppLogic.WriteAppLogs(string.Format("Exception:\n{0}\nMessage:\n{1}Inner Exception:\n{2}\nStack Trace:{3}", ex.ToString(), ex.Message.ToString(), ex.InnerException.ToString(), ex.StackTrace.ToString()));

    AppLogic.WriteAppLogs("Source " + ex.Source + ex.Message +  ex.StackTrace);

    //Log for production
    //DB.ExecuteSQL(String.Format("INSERT INTO ErrorLog (source, errormsg) VALUES ({0}, {1})", DB.SQuote(CommonLogic.GetThisPageName(true)), DB.SQuote(ex.ToString())));
}

return TreeMenu;

这是异常日志

  

来源App_Web_treeviewnew.aspx.cdcab7d2.de1ldkd2对象参考不   设置为对象的实例。在treeview.DisplayTreeMenu()中   treeviewNew.aspx.cs:第108行6/14/2013 5:25:19 PM

     

源mscorlib字典中没有给定的键。在   System.Collections.Generic.Dictionary`2.get_Item(TKey key)at   System.Data.DataView.CopyTo(DataRowView []数组,Int32索引)at   treeview.DisplayTreeMenu()上的System.Data.DataView.GetEnumerator()   在treeviewNew.aspx.cs:第106行6/14/2013 5:26:03 PM

     

源mscorlib字典中没有给定的键。在   System.Collections.Generic.Dictionary`2.get_Item(TKey key)at   System.Data.DataView.CopyTo(DataRowView []数组,Int32索引)at   treeview.DisplayTreeMenu()上的System.Data.DataView.GetEnumerator()   在treeviewNew.aspx.cs:第106行6/14/2013 5:26:38 PM

     

源mscorlib字典中没有给定的键。在   System.Collections.Generic.Dictionary`2.get_Item(TKey key)at   System.Data.DataView.CopyTo(DataRowView []数组,Int32索引)at   treeview.DisplayTreeMenu()上的System.Data.DataView.GetEnumerator()   在treeviewNew.aspx.cs:第106行6/14/2013 5:26:52 PM

     

源mscorlib字典中没有给定的键。在   System.Collections.Generic.Dictionary`2.get_Item(TKey key)at   System.Data.DataView.CopyTo(DataRowView []数组,Int32索引)at   treeview.DisplayTreeMenu()上的System.Data.DataView.GetEnumerator()   在treeviewNew.aspx.cs:第106行6/14/2013 5:27:04 PM

     

来源App_Web_treeviewnew.aspx.cdcab7d2.de1ldkd2对象参考不   设置为对象的实例。在treeview.DisplayTreeMenu()中   treeviewNew.aspx.cs:第108行6/14/2013 5:28:01 PM

     

源mscorlib字典中没有给定的键。在   System.Collections.Generic.Dictionary`2.get_Item(TKey key)at   System.Data.DataView.CopyTo(DataRowView []数组,Int32索引)at   treeview.DisplayTreeMenu()上的System.Data.DataView.GetEnumerator()   在treeviewNew.aspx.cs:第106行6/14/2013 5:29:45 PM

     

来源App_Web_treeviewnew.aspx.cdcab7d2.de1ldkd2对象参考不   设置为对象的实例。在treeview.DisplayTreeMenu()中   treeviewNew.aspx.cs:第108行6/14/2013 5:31:09 PM

     

来源App_Web_treeviewnew.aspx.cdcab7d2.de1ldkd2对象参考不   设置为对象的实例。在treeview.DisplayTreeMenu()中   treeviewNew.aspx.cs:line 73 6/14/2013 5:32:14 PM

     

源mscorlib字典中没有给定的键。在   System.Collections.Generic.Dictionary`2.get_Item(TKey key)at   System.Data.DataView.CopyTo(DataRowView []数组,Int32索引)at   treeview.DisplayTreeMenu()上的System.Data.DataView.GetEnumerator()   在treeviewNew.aspx.cs:第106行6/14/2013 5:32:27 PM

1 个答案:

答案 0 :(得分:0)

异常意味着某处的空值,最有可能在这里:CategoryRowView.Row,检查在抛出异常之前是否定义了此变量,并在其他行中执行相同的操作。