2010-11-17 10 views
1

Neden ağaç görünümündeki bir ebeveyni aldığımı anlatabilmem için bir sorun yaşıyorum. Eminim unuttuğum basit bir şey ama eminim biraz şaşırdım. Ben ** 's etrafında sorun yaşıyorum ama orada yanlış bir şey olması durumunda kodun geri kalanı dahil.Iç içe geçmiş bir ağaç için bir veritabanı öğelerini eklemek için döngü C#

Kodu:

string connStr = @"Provider=Microsoft.ACE.OLEDB.12.0; Data Source=PartsTree.accdb"; //2007 db format 
      //string connStr = @"Provider=Microsoft.JET.OLEDB.4.0; Data Source=PartsTree.accdb"; //2003 db format 
      try 
      { 
       using (OleDbConnection dbConn = new OleDbConnection(connStr)) 
       { 
        string queryString = "SELECT ID, parent_ID, description FROM Parts;"; //Note two semicolons 
        dbConn.Open(); 

        OleDbCommand dbCmd = dbConn.CreateCommand(); 
        dbCmd.CommandText = queryString; 
        OleDbDataReader rdr = dbCmd.ExecuteReader(); 

        int numberColumns = rdr.FieldCount; // How many columns are there in the DB 
        for (int x = 0; x < numberColumns; x++) 
        { 
         treeView1.Nodes.Add(rdr.GetName(x)); // Add a parent node to the tree for each column 
        } 


        **for (int y = 0; y <= numberColumns; y++) 
        { 
         while (rdr.Read()) 
         { 
          string childData = rdr[y].ToString(); 
          treeView1.Nodes[y].Nodes.Add(childData); 
         } 

        }** 

        rdr.Close(); 

        //while (rdr.Read()) 
        //{ 
        //  string blah = rdr[2].ToString(); 
        //  treeView1.Nodes[0].Nodes.Add(blah); 
        // } 
        // rdr.Close(); 

        dbConn.Close(); 
       } 
      } 
      catch (OleDbException y) 
      { 
       Console.Error.WriteLine("Error: Failed to create a database connection. \n{0}", y.Message); 
      } 
+0

Tamam, döngüler için/süre etrafında geçiş yaparak bu çalışma almak başardı. Teşekkürler!!! –

cevap

1

Ayaklı döngü:

while (rdr.Read()) 
{ 
    for (int y = 0; y <= numberColumns; y++)   
    { 
     string childData = rdr[y].ToString(); 
     treeView1.Nodes[y].Nodes.Add(childData); 
    } 
} 
1

Sen, satırları arasında döngü sonra sütunlar gereklidir.

DbDataReader, bir resultset'in yalnızca ileriye dönük bir görünümüdür.
Okuyucuyu "geri sarmak" ve satırları tekrar görmek mümkün değildir.

Geçerli kodunuzda, ilk sütun için satırlar arasında geçiş yaptıktan sonra, Read() her zaman daha fazla satır olmadığından false değerini döndürecektir.

İlgili konular