2010-06-10 27 views
0

我必須找到一種方法在C#中要做到這一點,如果可能的話...C#mysqlreader

我必須將文件夾列表(mysql表),併爲每個文件夾循環我實例化我必須做另一個查詢,但是當我這樣做時它說:「已經有一個與此連接關聯的開放DataReader」,並且我已經在mysqlreader循環中。

請注意,我已經簡化了代碼,只是爲了向您展示,事實是我必須在mysqlreader循環中執行查詢,並且由於它們在同一個連接上,所以看起來不可能?

MySqlConnection cnx = new MySqlConnection(connexionString); 

     cnx.Open(); 

     MySqlCommand command= new MySqlCommand("SELECT * FROM folder WHERE folder_id = " + id, cnx); 

     MySqlDataReader reader= commande.ExecuteReader(); 

     while (reader.Read()) 
     { 
      this.folderList[this.folderList.Length] = 
        new CFolder(reader.GetInt32"folder_id"),                    cnx); 
     } 
     reader.Close(); 

     cnx.Close(); 
+0

內部連接的使用是否存在於「new CFolder(int)」調用這個相同函數的事實中? – Reddog 2010-06-10 16:45:52

回答

1

那麼你可以得到所有的數據下降localy第一,也許一個數據表或其他一些集合,然後通過循環內部讓你第二SQL調用循環。

但是,在循環中進行SQL調用通常不是一個好的途徑。無論如何,您可以在第一次通話中獲得所有數據嗎?

0

你有幾個選擇這裏,無論是將工作的優良:

  1. 創建一個新的連接,並使用第二個讀者的第二個連接。

  2. 迭代第一個數據讀取器的結果,將folder_id值存儲在集合中,然後關閉讀取器並打開一個新的讀取器。

0

當您打開DataReader時,不能將該連接用於其他任何事情。您必須先關閉打開的閱讀器,或者打開新的連接。數據庫連接是寶貴的資源,所以我不建議在循環中打開新的連接,除非絕對必要。

我沒有完全得到您發送的代碼..連接不用於除了datareader那裏的任何東西。