SQL ODBC 适配器内存不足异常

Posted

技术标签:

【中文标题】SQL ODBC 适配器内存不足异常【英文标题】:SQL ODBC adapter out of memory exception 【发布时间】:2013-05-02 11:02:55 【问题描述】:

我正在使用 odbc 适配器和数据集连接和接收来自 IBM I Series 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())  ... 

它奇怪地在rt.Fill(ds);线上给出了System.OutOfMemoryException

如果有 10 亿行 130 列会导致这个错误吗?

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

【问题讨论】:

【参考方案1】:

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

【讨论】:

以上是关于SQL ODBC 适配器内存不足异常的主要内容,如果未能解决你的问题,请参考以下文章

使用 EPPlus 库从 SQL Server 导出到 Excel 时出现“内存不足”异常

Flink on Yarn 提交任务由于内存不足产生的异常调试

保留内存是不是会导致内存不足异常

内存不足异常 - 非托管内存

为啥我的 C# 应用程序中出现内存不足异常?

Parallel.ForEach 内存不足异常