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

C# 如何处理错误“System.Data.dll中发生“System.StackOverflowException”类型的未处理异常”,c#,asp.net,loops,recursion,C#,Asp.net,Loops,Recursion,我在向文本链接网格显示来自递归循环结果的数据时出错 调试时,将显示以下消息: 故障排除提示: 请确保没有无限循环或无限递归 这个方法与我递归循环: private void LevelControl(string parID) { DataSet ds = RunQuery("Select PositionCode,PositionName,Parent from Position where Parent = '" + parID + "'");

我在向文本链接网格显示来自递归循环结果的数据时出错

调试时,将显示以下消息: 故障排除提示: 请确保没有无限循环或无限递归

这个方法与我递归循环:

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 />"));
        }
    }
那我该怎么解决这个问题呢?
应该在方法的代码中添加什么?

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

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

请参阅:您混淆了父项和子项,因此反复运行相同的查询。

递归的基本情况是什么,即不递归调用方法,您可以直接计算parID的哪个值?您编写的代码将导致无限递归。第一次在中,获取第0行第2列,然后再次调用该方法。第二次调用取第0行第2列,再次调用该方法,冲洗,重复。您没有停止递归的条件。你想完成什么?顺便说一下,使用参数化查询。