-1

我正在使用以下代码生成有序列表。在负载测试期间刷新此页面时,此代码会在第 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 对象引用未设置为对象的实例。在 treeviewNew.aspx.cs:line 108 中的 treeview.DisplayTreeMenu() 2013 年 6 月 14 日下午 5:25:19

源 mscorlib 字典中不存在给定的键。在 System.Collections.Generic.Dictionary`2.get_Item(TKey key) at System.Data.DataView.CopyTo(DataRowView[] array, Int32 index) at System.Data.DataView.GetEnumerator() at treeview.DisplayTreeMenu() in treeviewNew.aspx.cs:第 106 行 2013 年 6 月 14 日下午 5:26:03

源 mscorlib 字典中不存在给定的键。在 System.Collections.Generic.Dictionary`2.get_Item(TKey key) at System.Data.DataView.CopyTo(DataRowView[] array, Int32 index) at System.Data.DataView.GetEnumerator() at treeview.DisplayTreeMenu() in treeviewNew.aspx.cs:第 106 行 2013 年 6 月 14 日下午 5:26:38

源 mscorlib 字典中不存在给定的键。在 System.Collections.Generic.Dictionary`2.get_Item(TKey key) at System.Data.DataView.CopyTo(DataRowView[] array, Int32 index) at System.Data.DataView.GetEnumerator() at treeview.DisplayTreeMenu() in treeviewNew.aspx.cs:第 106 行 2013 年 6 月 14 日下午 5:26:52

源 mscorlib 字典中不存在给定的键。在 System.Collections.Generic.Dictionary`2.get_Item(TKey key) at System.Data.DataView.CopyTo(DataRowView[] array, Int32 index) at System.Data.DataView.GetEnumerator() at treeview.DisplayTreeMenu() in treeviewNew.aspx.cs:第 106 行 2013 年 6 月 14 日下午 5:27:04

源 App_Web_treeviewnew.aspx.cdcab7d2.de1ldkd2 对象引用未设置为对象的实例。在 treeviewNew.aspx.cs:line 108 中的 treeview.DisplayTreeMenu() 2013 年 6 月 14 日下午 5:28:01

源 mscorlib 字典中不存在给定的键。在 System.Collections.Generic.Dictionary`2.get_Item(TKey key) at System.Data.DataView.CopyTo(DataRowView[] array, Int32 index) at System.Data.DataView.GetEnumerator() at treeview.DisplayTreeMenu() in treeviewNew.aspx.cs:第 106 行 2013 年 6 月 14 日下午 5:29:45

源 App_Web_treeviewnew.aspx.cdcab7d2.de1ldkd2 对象引用未设置为对象的实例。在 treeviewNew.aspx.cs:line 108 中的 treeview.DisplayTreeMenu() 2013 年 6 月 14 日下午 5:31:09

源 App_Web_treeviewnew.aspx.cdcab7d2.de1ldkd2 对象引用未设置为对象的实例。在 treeviewNew.aspx.cs:line 73 2013 年 6 月 14 日下午 5:32:14 中的 treeview.DisplayTreeMenu()

源 mscorlib 字典中不存在给定的键。在 System.Collections.Generic.Dictionary`2.get_Item(TKey key) at System.Data.DataView.CopyTo(DataRowView[] array, Int32 index) at System.Data.DataView.GetEnumerator() at treeview.DisplayTreeMenu() in treeviewNew.aspx.cs:第 106 行 2013 年 6 月 14 日下午 5:32:27

4

1 回答 1

0

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

于 2013-06-14T22:58:27.373 回答