Рекурсия, странное поведение IIS
возможно мне не хватает опыта, но столкнулся с такой вот проблемой.
Есть иерархия меню:
1.
1.1
1.2
1.2.1
2.2
2.1
и тд.
Я хочу сделать класс с 2 параметрами - 1. набором "Children" и 2. Parent,
где Children - вложенные меню, а Parent, родительское меню текущего подменю.
Вот собственно код:
{
private PortalMenu _ParentMenu;
public PortalMenu ParentMenu
{
get { return _ParentMenu; }
set { _ParentMenu = value; }
}
private PortalMenuCollection _ChildrenMenu;
public PortalMenuCollection Children
{
get { return _ChildrenMenu; }
set { _ChildrenMenu = value; }
}
//========== CLASS=========
public PortalMenu(string MenuId)
{
_ParentMenu = new PortalMenu(SomeMenuId);
_ChildrenMenu = new PortalMenuCollection();
DataSet cm = SQL.selectQuery("SELECT * FROM Portal_Menu WHERE ParentMenu='"+ MenuId +"'", "Portal_Menu");
foreach (DataRow dr in cm.Tables[0].Rows)
{
PortalMenu cMenu = new PortalMenu(dr["id"].ToString());
_ChildrenMenu.AddMenu(cMenu);
}
}
}
вот при таком раскладе, IIS вообще вылетает на сервере. Вроде бы зацикленности нет (все берется из SQL таблицы, где есть колонка ID и ParentID). Чаще, перед выполнением скрипта, сервер начинает запрашивать несоклько раз NT аутендефикацию, после чего выдает, что нет доступа.
При этом, если убрать одно из properties из класса, то все работает нормально.
Вот, что хранится в БД:
ID, ParentID
1, 0
2, 1
3, 2
Помогите решить проблему.
PS
еще эта зараза в логах на сервере пишет (при падении скрипта)
For more information, see Help and Support Center at http://go.microsoft.com/fwlink/events.asp.
возможно мне не хватает опыта, но столкнулся с такой вот проблемой.
1) Что делает SQL.selectQuery
2) я уже устал говорить об использовании параметризированных запросов
3) меню можно строить за один запрос
4) с каких пор С# стал скриптом???
2) я уже устал говорить об использовании параметризированных запросов
3) меню можно строить за один запрос
4) с каких пор С# стал скриптом???
видимо все же я действительно делал бесконечный цикл. Временно решил проблему, введя флаг отключения загрузки Children при поиске Parent. Получается, что у элемента Меню внутри Parent Children = null. Ну это не проблема.
1. Это класс запроса к SQL серверу.
2. сорри
3. Можно, я так и сделаю. Но проблема в том, что при поиске Parent (при повторном вызове класса) он будет повторно искать и Children (сейчас я как раз и отключил этот момент у Parent с помощью флага)
4. =)), сорри, никак не отвыкну от интерпретируемых языков.
Я понимаю что это класс запроса. Другое дело, это его манипуляции, осуществляемые над соединением с БД.
3. Можно, я так и сделаю. Но проблема в том, что при поиске Parent (при повторном вызове класса) он будет повторно искать и Children (сейчас я как раз и отключил этот момент у Parent с помощью флага)
Вот пример с TreeView:
http://forum.codenet.ru/showthread.php?p=243233#post243233
{
command.CommandText = sqlStatement;
SqlDataAdapter adapter = new SqlDataAdapter(command);
DataSet ds = new DataSet();
connection.Close();
connection.Open();
adapter.Fill(ds, table);
connection.Close();
return ds;
}