2016-06-01 11 views
1

TypedTableにデータベーステーブルをロードし、そのキーが既に存在する場合は更新するコードの問題、更新部分に問題がある私のコードは非常に遅いですが。DataTable、VB.NETの行の挿入/更新

私が扱うテーブルのほとんどは完全なリフレッシュが必要なので、単純なAddTableRow(row)プロシージャを使用してデータを消去し、タイプテーブルの別のテーブルからすべてを再追加しますが、データ私はLoadDataRow(row, fAcceptChanges)関数を使用していますが、.BeginLoadData() -> .EndLoadData()であっても、約500k行のデータを含むテーブル(すべての行は15 colsのようなものです)では非常に遅い(1秒あたり2/3更新)。

私はvb.netの初心者ですので、私はデータテーブルを更新する必要があります。しかし、誰かがそれをスピードアップする方法を知っていれば、私は本当にすべてを聞いてうれしいでしょう。

いくつかの詳細情報:

私は、挿入部から引き上げexeptionsを扱うことができるように、私のテーブルの制約をチェックする必要があり、加えて自動ので、ほとんど私は行ごとにデータを挿入していますので、理由がありますTypedDataTableの制約チェックでは、10以上のdbテーブルを処理する必要があると考えると、かなり良いです。このATMのように実行し、更新のための

マイコード:

Table = Parser.GetData() 
TypedTable = TableAdapter.GetData() 

For Each row In Table 
    Try 
     Dim TypedRow = TypedTable.NewRow() 
     LoadNotTypedIntoTyped(row, TypedRow) 
     TypedTable.BeginLoadData() 
     TypedTable.LoadDataRow(TypedRow.ItemArray, True) 'TODO speed up this 
     TypedTable.EndLoadData() 
    Catch ex As Exception 
     'Generic exception handling here 
    End Try 
Next 

SqlBulkCopyLoadProcedure() 
+0

:SQLが、私は何をしたかのコードDBの初心者だ私が間違っている場合ので、私は矛盾ここ

コード、説明、価格などで私はhw/swコードを主キーとして使用してテーブルを扱うので、それは英数字の文字列です – Forna

答えて

0

私は特定の問題に良い解決策を見つけました。私のデータソースはDBテーブルに関連しているため、テーブルの制約をより詳細にコントロールできるtypedtableを使用しているので、新しいデータをロードする新しい空の型指定されたテーブルを作成した後、dbとTable1.Merge(Table2)データをマージします。

私の場合はこれが可能です。なぜなら、メモリが問題になる場合は、あまりにも大きな(約500kレコード)で扱うデータの量が多いからです。実行可能な解決策はサポートテーブルを作成し、私は、私が扱うリストは、ハードウェア/ソフトウェアに関する情報が含まれていることを言及するのを忘れてしまった

Dim SupportTable As TypedTable = MyTypedTable.Clone() 
For each row in TableToLoad 
    Dim NewTypedRow = SupportTable.NewRow() 
    For Each col In Columns 
     'Load every column 
    Next 
    SupportTable.AddTypedRow(NewTypedRow) 
Next 
TypedTable.Merge(SupportTable) 
TypedTable.AcceptChanges() 
'Load to database