0

ADO.NETを使用してMSSQLデータベースに変換して保存したいOracleデータベーステーブル(約400万レコード)にいくつかのデータがあります。これまでのところ、(はるかに小さなテーブルの場合) DataAdapter を使用して Oracle データベースからデータを読み取り、さらに処理するために DataTable を DataSet に追加しました。

巨大なテーブルでこれを試したところ、メモリ不足の例外がスローされました。(これは、テーブル全体をメモリにロードできないためだと思います):)

現在、テーブル全体をメモリに保存せずに、この抽出/転送/ロードを実行する良い方法を探しています。DataReader を使用して、DataTable 内の単一の dataRecords を読み取りたいと思います。約10万行ある場合は、それらを処理し、後でDataTableをクリアしたいと思います(メモリを再び解放するため)。

ここで、ado.net を使用して単一の datarecord を行として dataTable に追加する方法と、dataTable をメモリから完全にクリアする方法を知りたいと思います: これまでの私のコード:

Dim dt As New DataTable

    Dim count As Int32
    count = 0
    ' reads data records from oracle database table'
    While rdr.Read()

        'read n records and add them to a dataTable'
        While count < 10000
            dt.Rows.Add(????)

            count = count + 1
        End While

        'transform data in the dataTable, and insert it to the destination'


        ' flush the dataTable after insertion'
        count = 0
    End While

ご回答ありがとうございました!

4

1 に答える 1

1

元の方法を使用できますが、 select ステートメントでlimitandを使用してバッチで実行します。skipしたがって、一度に 100,000 行を実行し、すべてのデータを取得するまでループします。

そうすれば、コードをあまり変更する必要がなくなります

于 2010-03-22T15:10:31.357 に答える