Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Рекурсия, странное поведение IIS

29K
06 марта 2009 года
Daniel Lavrushin
30 / / 26.10.2008
Привет,

возможно мне не хватает опыта, но столкнулся с такой вот проблемой.

Есть иерархия меню:
1.
1.1
1.2
1.2.1
2.2
2.1
и тд.

Я хочу сделать класс с 2 параметрами - 1. набором "Children" и 2. Parent,
где Children - вложенные меню, а Parent, родительское меню текущего подменю.


Вот собственно код:
Код:
public class PortalMenu
{
   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
еще эта зараза в логах на сервере пишет (при падении скрипта)
 
Код:
Faulting application w3wp.exe, version 6.0.3790.3959, stamp 45d6968e, faulting module kernel32.dll, version 5.2.3790.4062, stamp 46264680, debug? 0, fault address 0x0000bee7.

For more information, see Help and Support Center at http://go.microsoft.com/fwlink/events.asp.
Ни о чем, короче, но все же...
5
06 марта 2009 года
hardcase
4.5K / / 09.08.2005
Цитата: Daniel Lavrushin
Привет,

возможно мне не хватает опыта, но столкнулся с такой вот проблемой.

1) Что делает SQL.selectQuery
2) я уже устал говорить об использовании параметризированных запросов
3) меню можно строить за один запрос
4) с каких пор С# стал скриптом???

29K
06 марта 2009 года
Daniel Lavrushin
30 / / 26.10.2008
Цитата: hardcase
1) Что делает SQL.selectQuery
2) я уже устал говорить об использовании параметризированных запросов
3) меню можно строить за один запрос
4) с каких пор С# стал скриптом???





видимо все же я действительно делал бесконечный цикл. Временно решил проблему, введя флаг отключения загрузки Children при поиске Parent. Получается, что у элемента Меню внутри Parent Children = null. Ну это не проблема.

1. Это класс запроса к SQL серверу.
2. сорри
3. Можно, я так и сделаю. Но проблема в том, что при поиске Parent (при повторном вызове класса) он будет повторно искать и Children (сейчас я как раз и отключил этот момент у Parent с помощью флага)
4. =)), сорри, никак не отвыкну от интерпретируемых языков.

5
06 марта 2009 года
hardcase
4.5K / / 09.08.2005
Цитата: Daniel Lavrushin
1. Это класс запроса к SQL серверу.

Я понимаю что это класс запроса. Другое дело, это его манипуляции, осуществляемые над соединением с БД.

Цитата: Daniel Lavrushin

3. Можно, я так и сделаю. Но проблема в том, что при поиске Parent (при повторном вызове класса) он будет повторно искать и Children (сейчас я как раз и отключил этот момент у Parent с помощью флага)


Вот пример с TreeView:
http://forum.codenet.ru/showthread.php?p=243233#post243233

29K
06 марта 2009 года
Daniel Lavrushin
30 / / 26.10.2008
вот SQL
Код:
public DataSet selectQuery(string sqlStatement, string table)
    {
        command.CommandText = sqlStatement;
        SqlDataAdapter adapter = new SqlDataAdapter(command);
        DataSet ds = new DataSet();

        connection.Close();
        connection.Open();
        adapter.Fill(ds, table);
        connection.Close();
        return ds;
    }
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог