我有視覺狐狸親數據庫與成千上萬的行。我正在使用oledb從fox pro獲取數據並導出(在完成一些計算和格式化之後)到sql server.I曾使用數據集一次填充2-3個數據表(相關表)。oledb,視覺狐狸親和c#
第一個問題是內存使用非常高,因爲數據集很大。我想減少內存佔用。對此有任何建議。
所以我已經決定在time.How獲取幾行做我使用OLEDB命令,這樣我就可以根據所有獲取的如1-20和20-40再等
我有視覺狐狸親數據庫與成千上萬的行。我正在使用oledb從fox pro獲取數據並導出(在完成一些計算和格式化之後)到sql server.I曾使用數據集一次填充2-3個數據表(相關表)。oledb,視覺狐狸親和c#
第一個問題是內存使用非常高,因爲數據集很大。我想減少內存佔用。對此有任何建議。
所以我已經決定在time.How獲取幾行做我使用OLEDB命令,這樣我就可以根據所有獲取的如1-20和20-40再等
讀取行這裏的評論和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;
}
}
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();
}
但有一個小問題。當有內部連接時,recno()似乎不工作。 – arjun 2012-08-03 11:41:22
@arjun你能否提供一個你如何試圖在內部連接中使用RECNO()的例子? – 2012-08-22 13:13:07