2024年に成し遂げたこと

Access2000以降のデータベースに、
データを一括処理したいのですが、
OLEDBではバインド配列のような物が使えないようです。
ストアドはAccessでは無理だと思うので、
それ以外で一括処理できる方法を考えています。
(なるべくFor文でぐるぐる回すのは避けたいです)

ひとつ思い浮かんだのは
データを分割して、
それをスレッドに振り分けて並列処理するという方法ですが
他に高速に一括処理できる方法はあるのでしょうか?

言語はC#.NETです。 

A 回答 (4件)

>スレッドに振り分けて


高速な処理は期待できないと考えます。例えばWebアプリケーションのように、通信で時間を取られているならば、結果を待たずに次の処理を開始すれば、トータルの時間を短くできます。しかしテーブルへの取り込みでは、その処理だけでCPU時間を占有しているので、並列処理しても、それぞれの時間が延びるだけでしょう。
で、一案として、とにかくアクセスのインポート(マクロのテキスト変換。VBA であれば DoCmd.TransferText acImportDelim ??)まずAccessのテーブルに取り込んでから処理してはいかがでしょう?
だいぶ以前のことで記憶が曖昧ですが、ADOで接続し、CSVのデータを一件ずつAppendして行くより、インポートの方が桁違いに速かった経験があります。
    • good
    • 0
この回答へのお礼

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

一度スレッドの分割で試してみましたが、
ご指摘の通りやはり遅くなる結果が出ました。

アクセスのインポート処理の中身は
INSERT文の連続処理と同じと思っていたので、
そんなに速くなるとは思っていませんでした。
参考にさせて頂きます。

お礼日時:2005/08/13 02:58

一回限りの処理なら、直接Accessからクエリで処理しちゃいますけど...




多分違うんでしょうね...
    • good
    • 0
この回答へのお礼

回答ありがとうございました。
クエリーで出来ればよかったんですが、
何度もクエリーのパラメータを変えないといけないので
難しいところです。

お礼日時:2005/08/13 02:50

Datasetは取得できているのですね?


http://support.microsoft.com/default.aspx?scid=k …

であれば、コマンドビルダが利用できませんか?
http://support.microsoft.com/kb/307587/JA/
例はSQL-SERVERなのでSqlCommandBuilderを利用していますが、同様にOleDbCommandBuilderも存在します。
    • good
    • 0
この回答へのお礼

何度もありがとうございます。

CSVファイルからデータを読み込んで、
これからテーブルに追加させるところなので
Datasetはまだ取得できていない状態です。
Datsetにデータが格納さえできれば
この方法で一括処理可能ですね。

お礼日時:2005/08/11 10:47

>データを一括処理


主にどのようなパターンですか?
例があるとわかりやすいです。

単にUPDATE文の発行でできないような、複雑な処理ということですか?

複雑であればストアドであっても、カーソルセットして、グルグル回すことになると思うのですが。。。

この回答への補足

すみません。ちょっと分かりにくかったですね。
処理自体は単純なINSERT文の連続です。
INSERT INTO TEST VALUES(1,2,3,4,5,6,7)がたくさんある状態です。

バインド配列ならレコード数が多くても
SQLの発行命令(DBサーバとの通信)は1回で済むんですが
普通にやるとなるとINSERT文をレコード数分を発行する必要になり
遅くなってしまうのを防ぎたいという事です。

補足日時:2005/08/10 20:58
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています

関連するカテゴリからQ&Aを探す


おすすめ情報

このQ&Aを見た人がよく見るQ&A