2011-10-24 15 views
0

申し訳ありません私の英語があまり良くない場合、私は問題を説明しようとします。データセットを使用して1Dbから別のデータにデータをコピー

私は実用的なソリューションを作ったが、それは非常に遅いです(ODBCで接続)のMySQL DB

の表に(のOleDBに接続)AccesのMDBの表からすべてのデータをコピーする必要があり、他のソリューションを試して、パフォーマンスが向上するかどうかを確認したいと考えています。

溶液、MDBに接続DataReaderを使用して、その後のDataReaderで行ごとに、私はレコードがよりいる

(Iテーブルを切り捨てるコピーする前に、それが空で取得する)MySQLのテーブルへの挿入を行います10Kとこの操作は非常に遅く、私は他の2つのテーブルでも同じことを行う必要があります。

1 DBにOleDB connがあり、もう1つにODBC connがあるため、直接SQL挿入(INSERT INTO A in ..... SELECT * FROM B)はできません。

私はTableAdaptersDataSetを使ってこの操作をしようと考えましたが、動作させることはできません。

問題は、私が投稿することができますいくつかのコードが必要な場合は、データセットのHasChangesfalse

であるということですが、私がやっていることは以下の通りです:

  • 接続MDbと
  • にOleDbTableAdapter
  • を作成します。データセットの作成
  • TableAdapterを使用したデータセットの埋め込み
  • MySqlDBへの接続
  • ODBCTableAdapterの作成
  • ODBCTableAdapterの更新コマンドを最初のデータセットとともに使用する。

しかしDSは、彼がDBには何も書いていないので、私は別のデータセットを使用することを考えて、行を追加するDS1からDS2にデータをコピーし、has.changesは本当だったかどうかを確認し、意思ので、コミット変更がありませんDS2を使用してODBCTableadapterのコマンドを更新します。

私は、データセットの間でデータをコピーするためにしようと試み:

ds2 = ds1.copy 

私はDS1データローをループしてDS2DS1からすべての行をインポート、データセットのインポート機能を使用することも試みました。 どちらの場合も、行はDS2に追加されますが、まだHasChangesはfalseです。どうすればよいですか? 私はDS.Acceptchangesを使用せず、PrimaryKeyが定義されている、UpdateCommandが定義されている可能性のある質問を明確にするために、DSにデータがあります(チェックするには2つのDataGridを設定します)。 エラーは表示されず、DBに書き込まれたデータはありません。

提案がありますか?アドバイスをありがとう。

+0

MySqlConnectionに最初のTableAdapterのUpdateCommandを使用することはできません。最初のDataTableの各DataRowを2番目の(MySQL)DataTableに挿入する必要があります。次に、MySQLテーブルのTableAdapterを使用してこのDataTableを更新します。 –

+0

はい、たぶん私は悪いことを説明したでしょう、それは、私は2番目のDatatableを実装しましたが、vbのDatatableは変更がないので、私はMysqlTableAdapterの更新を呼び出すときにDBに何も書き込まれません。 –

答えて

1

プロセスを大幅に高速化できる唯一の方法は、SQLの更新コマンドをバッチすることです。それ以外の場合、各更新要求は1度に1つずつ実行されます。

大量のデータを高速にインポートするためには、MySQL LOAD DATA INFILEコマンドを使用することをお勧めします。

MS SQL ServerのSqlBulkCopyクラスに匹敵する関数を見つけることができませんでしたが、あなたのMySQLライブラリが同様の関心のある機能をサポートしていれば、

一般的に、生成するネットワークトラフィックが少ないほど、大規模なデータベースの挿入が可能になります(ただし、あるポイントの後には他の制限事項があります)。

+0

さて、私はそのコマンドをチェックしようとします。この操作をリンクテーブルを使用して行う前に、vb.netのSQLコマンド(INSERT INTO tab2 SELECT * tab1)を使用して単純に行ったので、非常に高速でした。しかし、私はそれをしたいと思った最終的に私が取得したい結果は、アクセスDBが変更され、MysqlDbをimmidiatly更新するときにキャッチサーバーに常駐VBアプリケーションを作成することです。しかし、私はそれがより難しくなると思います –

+0

LOAD DATA INFILEは私が探しているものだと思われますが、何もシンプルなので、今はmdbをcsvに変換する方法をチェックしなくてはなりません。 ^^ –

関連する問題