- - PR -
VB.NETでのOracleへのINSERT
1|2|3
次のページへ»
投稿者 | 投稿内容 |
---|---|
|
投稿日時: 2005-12-01 20:21
いつもお世話になっております。
今、ファイルからデータを一行づつ取得して文字数で分割しDBに登録するというプログラムを作成しております。 一行づつINSERT文を実行するという方法はすぐ思いついたのですがパフォーマンスが悪いということぐらいは分かります。 そこで質問なのですが、 トランザクションでくくればコミットのタイミングでのみDBアクセスし、パフォーマンスがよくなるのでしょうか? また、空のDataSetにデータを入れ、一括して送ることはできるのでしょうか? みなさんはこのような時はどのように処理されていますか? ご教授よろしくおねがいします。 |
|
投稿日時: 2005-12-01 20:35
Oracle なら、SQL Loader という選択肢も…
|
|
投稿日時: 2005-12-01 20:55
迅速な対応ありがとうございます。
SQL Loader はデータがカンマなどで区切られていない場合でも使用できるのですか? |
|
投稿日時: 2005-12-01 21:15
すみません。
SQL Loader についてほとんど調べもせずに投稿してしまいました。 SQL Loader を使うと管理するファイルが増えてしまうのでできれば使いたくないです。 ほかによい方法はありませんか? |
|
投稿日時: 2005-12-01 21:34
バインド変数は使用していらっしゃいますか?
バインド変数を利用すると、SQL文のコンパイルが都度行われなくて済むため、 多少なりともパフォーマンスが良くなるのだったと記憶しておりますが。 (ちなみに今やっているプロジェクトでは、バインド変数は使っているくせに おかしな共通ルールで一行ずつバインドしなおしされています・・・(泣)) |
|
投稿日時: 2005-12-01 21:56
複数行の場合バインド配列になるんでしょうか?
取り敢えずINSERTしまくってからCOMMITしようってことに落ち着いてしまいそうですが、先にバインド変数調べて試してみます。 |
|
投稿日時: 2005-12-01 22:02
INSERT INTO table (column1, column2, ...) VALUES (?, ?, ...)
という SQL 文を用意して、 OracleCommand.CommandText にセット OracleCommand.Parameters に、それぞれの値をセット これを CSV ファイルの行の数だけぶん回せばいいです。 ___________________________________________________________________ □ written by Jitta on 2005/12/01 □ Microsoft MVP :Visual Developer ASP/ASP.NET Oct.2005-Sept.2006 _________________ |
|
投稿日時: 2005-12-02 09:13
DBMS が oracle なら 配列バインド という手も
これならラウンドとリップは一回ですね 何行追加してから COMMIT とかの細かい制御は苦手ですが パフォーマンスに関しては何度も プロシージャ 呼び出すよりも 効率がいいです。 |
1|2|3
次のページへ»