2013-10-11 45 views
1

我有幾百萬的記錄在我的數據庫表,我想在數據集中存儲(我用的設置來創建Lucene索引數據。)如何解決C#中數據集的內存異常錯誤?

的問題是數據集是不能夠處理數百萬條記錄和它給我的記憶異常。

public DataSet GetDataSet(string sqlQuery) 
    { 
     DataSet ds = new DataSet(); 
     SqlConnection sqlCon = new SqlConnection("Server=M-E-DB2;Database=IS;Trusted_Connection=True;"); 
     SqlCommand sqlCmd = new SqlCommand(); 
     sqlCmd.Connection = sqlCon; 
     sqlCmd.CommandType = CommandType.Text; 
     sqlCmd.CommandText = sqlQuery; 
     SqlDataAdapter sqlAdap = new SqlDataAdapter(sqlCmd); 
     sqlAdap.Fill(ds); 
     sqlCon.Close(); 
     return ds; 

    } 

有人可以請建議我一個替代方案來處理內存不足的例外,記住我的情況。

謝謝。

+0

你真的需要* *在同一個數據在內存中的去嗎?你不能批量讀取數據並建立索引嗎? –

+0

我不知道。據我所知,索引寫入器刪除所有數據,然後寫入索引。我看不出有什麼方法可以更新它。雖然不是Lucene專家。 – Huzaifa

回答

3

你可以通過線符合SqlDataReader的

using (connection) 
    { 
     SqlCommand command = new SqlCommand(); 
     sqlCmd.Connection = sqlCon; 
     sqlCmd.CommandType = CommandType.Text; 
     sqlCmd.CommandText = sqlQuery; 
     connection.Open(); 

     SqlDataReader reader = command.ExecuteReader(); 

     if (reader.HasRows) 
     { 
      while (reader.Read()) 
      { 
       /// you can get values 
      } 
     }   
     reader.Close(); 
    } 
+0

存儲是我的問題沒有閱讀。 SQLDataAdapter已經成功讀取記錄。但是,將它們存儲到數據集中會造成問題。 – Huzaifa

+3

@John - line__line是你的解決方案。除非你只是將它們存儲起來,那就是你的問題。 –

+1

如果你的數據真的很大,我認爲你需要在文件或數據庫上使用它。也許你可以創建臨時表並使用它的數據,然後同步。但是,對不起,我現在不能提供幫助。 – progpow