У меня была ошибка при отображении данных в сетку текстовых ссылок, которые исходят из результатов рекурсивного цикла.Как обрабатывать ошибку «Необработанное исключение типа« System.StackOverflowException »произошло в System.Data.dll«
, когда я отладки, появится сообщение: «Советы по устранению неисправностей: убедитесь, что вы не имеете бесконечный цикл или бесконечную рекурсию.»
и этот метод рекурсивной захвата петли со мной:
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 />"));
}
}
то что делать, чтобы решить эту проблему? Что следует добавить к коду в методе?
Что такое базовый регистр для вашей рекурсии, например, какое значение «parID» вы можете оценить без рекурсивного вызова метода? –
Ваш код в письменном виде приведет к бесконечной рекурсии. В первый раз, вы принимаете строку 0 столбца 2, затем вы вызываете метод снова. Второй вызов вы берете строку 0 столбца 2, снова вызываете метод, полоскаете, повторяете. У вас нет условий, где вы остановите рекурсию. Что вы пытаетесь достичь? – Tim
Используйте параметризованные запросы, кстати. – Ryan