SQL ODBC适配器内存不足异常

时间:2013-05-02 11:02:56

标签: c# sql odbc out-of-memory sqldataadapter

我使用odbc适配器和数据集连接并从IBM的I系列AS400数据库接收数据。

我有一个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()) { ... }

奇怪的是,System.OutOfMemoryException就行了rt.Fill(ds);

如果有10亿行,包含130列,会导致此错误吗?

如何避免此错误并收到我想要的数据?

1 个答案:

答案 0 :(得分:5)

  

如果有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

更多信息:

MSDN

OdbcDataReader Class

Contrasting the ADO.NET DataReader and DataSet