我有数千行的视觉狐狸专业数据库。我正在使用 oledb 从 fox pro 获取数据并将其导出(在进行一些计算和格式化之后)到 sql server。我使用数据集一次填充 2-3 个数据表(相关表)。
第一个问题是内存使用非常高,因为数据集很大。我想减少内存占用。对此有任何建议。
所以我决定一次获取几行。如何使用 oledb 命令获取行,以便我可以获取例如 1-20 和 20-40 等
我有数千行的视觉狐狸专业数据库。我正在使用 oledb 从 fox pro 获取数据并将其导出(在进行一些计算和格式化之后)到 sql server。我使用数据集一次填充 2-3 个数据表(相关表)。
第一个问题是内存使用非常高,因为数据集很大。我想减少内存占用。对此有任何建议。
所以我决定一次获取几行。如何使用 oledb 命令获取行,以便我可以获取例如 1-20 和 20-40 等
string queryString = "SELECT OrderID, CustomerID FROM Orders WHERE ORDERID >= @StartOrderID AND ORDERID <= @EndOrderID";
using (OleDbConnection connection = new OleDbConnection(connectionString))
{
OleDbCommand command = new OleDbCommand(queryString, connection);
command.Parameters.Add(new OleDbParameter("@StartOrderID", "PASS THE VALUE HERE"));
command.Parameters.Add(new OleDbParameter("@EndOrderID", "PASS THE VALUE HERE"));
connection.Open();
OleDbDataReader reader = command.ExecuteReader();
while (reader.Read())
{
//Retrieve records here
}
reader.Close();
}
根据所有评论和 HatSoft 的代码,我认为您正在寻找。这是伪代码,这意味着它不会编译,但应该让您很好地了解从这里到哪里去。
int NumberOfRecordsToRetrieve = 10000;
int StartRecordNumber = 1;
bool EndOfFile = false;
string queryString = "SELECT OrderID, CustomerID FROM Orders WHERE RECNO() BETWEEN @StartRecordNumber AND @EndRecordNumber";
While (!EndOfFile)
{
using (OleDbConnection connection = new OleDbConnection(connectionString))
{
OleDbCommand command = new OleDbCommand(queryString, connection);
command.Parameters.Add(new OleDbParameter("@StartRecordNumber", StartRecordNumber));
command.Parameters.Add(new OleDbParameter("@EndRecordNumber", StartRecordNumber + NumberOfRecordsToRetrieve));
connection.Open();
OleDbDataReader reader = command.ExecuteReader();
EndOfFile = true;
while (reader.Read())
{
EndOfFile = false
//Retrieve records here and do whatever process you wish to do
}
reader.Close();
StartRecordNumber += NumberOfRecordsToRetrieve;
}
}