0

我正在使用 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 列会导致这个错误吗?

我怎样才能避免这个错误并接收我想要的数据?

4

1 回答 1

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 类

对比 ADO.NET DataReader 和 DataSet

于 2013-05-06T14:09:24.843 回答