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 时出现“内存不足”异常