Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Разработка под ASP.NET > Рекурсия при чтении БД


Автор: Edd 7.3.2008, 17:39
Делаю дерево (выглядет примерно так):
-> Test
- -> Test 2
- - -> Test 3
-> Test 4
- -> Test 3
....

Для построения использую рекурсию:
В таблице (IDT, Name, SubID)
IDT - id
Name- название
SubID - id элемента (IDT) 

Код

protected void LoadGNTTreeRekursija(int lvl, string SubID)
    {
        //try
        {
            
            string SQLString = @"...";

            if (lvl == 1)
            {
                SQLString = @"....";
                ListBoxGNTTree.Items.Clear();
                ListBoxGNTTree.Items.Add("root");
                conn.Open();
            }

            string Name = "";
            string Level = "";
            for (int z = 0; z < lvl; z++) Level += "-";

            SqlCommand myCommand = new SqlCommand(SQLString, conn);
            SqlDataReader myReader = myCommand.ExecuteReader();
            while (myReader.Read())
            {
                 string Name = ....;

                ListBoxGNTTree.Items.Add(Level + "> " + Name);
                ListBoxGNTTree.Items[ListBoxGNTTree.Items.Count - 1].Value = myReader["IDT"].ToString;

                LoadGNTTreeRekursija(lvl + 1, myReader["IDT"].ToString());
            }
            myReader.Close();
            if (lvl == 1)  conn.Close();
        }
        //catch { }
    }

ругается на SqlDataReader myReader = myCommand.ExecuteReader(); говорит что уже открыт, но при рекурсии вроде создаётся другой и ни как не связон с придыдущим.
Как можно решить данную проблему?

Автор: PashaPash 7.3.2008, 18:42
Edd, добавь в ConnectionString MultipleActiveResultSets=True.

Автор: Edd 11.3.2008, 17:11
 smile Спасибо! Помогло

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)