2013-05-02 55 views
0

我連接,並從IBM i系列AS400數據庫接收數據,使用ODBC適配器和數據集。SQL ODBC適配器從內存異常

我有一個ODBC連接類似如下:

OdbcCommand cmd = new OdbcCommand(queryString, conn);   // Set Active Query 
OdbcDataAdapter rt = new OdbcDataAdapter(queryString, conn); // Active Data Transfer 
DataSet ds = new DataSet();          // Create DataSet 
rt.SelectCommand.CommandTimeout = 180;       // Set Command Timeout 
rt.Fill(ds);             // Transfer All Data 
var reader = ds.CreateDataReader();        // Create Reader 
reader.Read();             // Read 
while (reader.Read()) { ... } 

而且奇怪給出線rt.Fill(ds);

如果有10億點的行與列130它會導致這個錯誤的System.OutOfMemoryException

我怎樣才能避免這種錯誤,並收到我想要的數據?

回答

4

如果有10億點的行與列130它會導致這個錯誤?

這似乎是很多數據,並可能會導致錯誤。

如何避免此錯誤並接收我想要的數據?

您應該直接使用DataReader,繞過DataSet。如果你這樣做,DataReader將只加載一行數據,只有當你撥打Read時纔會得到下一行。

OdbcCommand cmd = new OdbcCommand(queryString, conn); // Set Active Query 
conn.Open();       // You may not need this if already open 
var reader = cmd.ExecuteReader();  // Create Reader 
while (reader.Read()) { ... }   // Process records, one at a time 
reader.Close();      // Close Reader after use 

更多信息:

OdbcDataReader Class在MSDN

Contrasting the ADO.NET DataReader and DataSet