2009-11-07 98 views
0

我有以下代碼:DbDataReader自己關閉?

 var entityConnection = (System.Data.EntityClient.EntityConnection)c.Connection; 
     DbConnection conn = entityConnection.StoreConnection; 
     ConnectionState initialState = conn.State; 

     List<Jobs> list = new List<Jobs>(); 

     int id = 0; 
try 
     { 
      if (initialState != ConnectionState.Open) 
       conn.Open(); 

      using (DbCommand cmd = conn.CreateCommand()) 
      { 
       cmd.CommandText = sql; 
       reader = cmd.ExecuteReader(); 

       int count = 0; 

       while (reader.Read()) 
       { 
        id = int.Parse(reader[0].ToString()); 

        list.Add(db.Jobs.Where(x => x.JobId == id).First()); 
        //count++; 
        //if (count == 150) break; 

        reader.NextResult(); 
       } 
      } 
     } 

,我也得到一個錯誤說:「system.invalidoperationexception:無效試圖調用NextResult當讀取器已關閉」

但事情是我還沒有關閉的讀者,但是當我刪除此行:

list.Add(db.Jobs.Where(x => x.JobId == id).First()); 

然後一切正常!但是這對我來說是無用的,因爲我需要從閱讀器填充一個列表對象,如果我不能這樣做 - 那麼我就無法讀取表格了! (PS我避免SqlDataReader對象,並使用實體框架作出上述呼籲使用dbdatareader與我同它相關聯)

+0

這是我的實體對象 - 但我刪除此,而是試圖使通用int類型的列表,然後做list.Add(ID);在那一行代替,但仍然有同樣的問題:-s – David 2009-11-07 19:11:41

+0

任何人都可以幫忙嗎? – David 2009-11-07 19:19:50

回答

6

您需要刪除調用NextResult。此方法用於前進到下一個結果集,而不是下一個記錄。在while循環的reader.Read()足夠

+0

天哪你是個生命的救星,感謝ü這麼多 – David 2009-11-07 19:30:38

3

你有沒有嘗試刪除該行

reader.NextResult(); 

while (reader.Read())線要細閱讀數據。

這就是我們如何使用它做的IDataReader。

+0

非常感謝你,你上面的那個人首先到達那裏,只有公平的2給他作爲答案,但是謝謝你太棒了! – David 2009-11-07 19:31:09

+0

好,astander其實我之前回答15秒) – 2009-11-07 19:38:58

+0

它的一切都很好,我們錯過小東西有些時候,但許多眼睛裏趕上什麼一對小姐X-) – 2009-11-07 19:47:45

1

你在當Reader.Read循環調用NextResult - 這是令人困惑的。如果'sql'返回的結果只是一組記錄,則NextResult將嘗試查找要執行的一組SQL批次。如果您只想循環訪問一組記錄,則不需要使用頂部的Reader.Read循環。

SELECT 1 AS ID; 
SELECT 2 AS ID; 
SELECT 3 AS ID 

如果它只是一個基本的選擇,它是行不通的:如果你的SQL包含多條語句,如只需要

NextResult。