0

私は何千もの行を持つビジュアルフォックスプロデータベースを持っています。oledbを使用してfoxproからデータをフェッチし、(計算と形式化を行った後)それをSQLサーバーにエクスポートしています。データセットを使用して一度に2〜3個のデータテーブル(関連テーブル)にデータを入力しました。

最初の問題は、データセットが巨大であるためにメモリ使用量が非常に多いことです。メモリフットプリントを削減したいです。これに関する提案。

だから私は一度にいくつかの行をフェッチすることにしました.oledbコマンドを使用して行をフェッチして、たとえば1〜20、次に20〜40などをフェッチできるようにするにはどうすればよいですか?

4

2 に答える 2

1
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();
    }
于 2012-07-31T09:31:37.240 に答える
1

ここにあるすべてのコメントと 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;
     } 
}
于 2012-08-01T14:35:26.203 に答える