如何处理错误“System.Data.dll中发生了'System.StackOverflowException'类型的未处理异常”

时间:2014-06-13 03:09:34

标签: c# asp.net loops recursion

在将数据显示到来自递归循环结果的文本链接网格时,我遇到了错误。

当我调试时,会显示以下消息: “故障排除提示: 确保您没有无限循环或无限递归。 “

这个方法和我一起递归循环:

private void LevelControl(string parID)
    {
        DataSet ds = RunQuery("Select PositionCode,PositionName,Parent from Position where Parent = '" + parID + "'");          
        for (int i = 0; i < ds.Tables[0].Rows.Count; i++)
        {
            var Parent = ds.Tables[0].Rows[i][0].ToString();
            var Child = ds.Tables[0].Rows[i][2].ToString();
            HyperLink lnk = new HyperLink();
            lnk = new HyperLink();
            lnk.Text = ds.Tables[0].Rows[i][1].ToString();
            lnk.ID = ds.Tables[0].Rows[i][0].ToString();
            lnk.NavigateUrl = "Tree03.aspx?parParent=" + Parent + "&parChild= " + Child + "";
            PlaceHolder1.Controls.Add(lnk);
            if (ds.Tables[0].Rows[i][2] != null)
            {
                parID = ds.Tables[0].Rows[i][2].ToString();
                LevelControl(parID);
            }
            PlaceHolder1.Controls.Add(lnk);
            PlaceHolder1.Controls.Add(new LiteralControl("<br />"));
        }
    }
那么我应该怎么做才能解决这个问题呢? 应该在方法中添加什么代码?

1 个答案:

答案 0 :(得分:0)

这是因为您将查询中的字段错误地映射到控件。看看指数。 在查询中:

0 PositionCode
1 PositionName
2 Parent 

在下面的代码中:

0 var Parent = ds.Tables[0].Rows[i][0].ToString();
1 lnk.Text = ds.Tables[0].Rows[i][1].ToString();
2 var Child = ds.Tables[0].Rows[i][2].ToString();

请参阅:您将Parent和Child混合在一起,因此反复运行相同的查询。