我使用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列,会导致此错误吗?
如何避免此错误并收到我想要的数据?
答案 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