- - PR -
VB.NETでのOracleへのINSERT
投稿者 | 投稿内容 |
---|---|
|
投稿日時: 2005-12-02 09:52
http://oraclesqlpuzzle.hp.infoseek.co.jp/2-1-1.html
まとめてinsertすれば、通信回数は減りますが、 pl/sqlでファイルから1行ずつ呼んでバルクバインドで一括insertする方法もありますね |
|
投稿日時: 2005-12-02 14:02
strSql ="INSERT INTO table (column1, column2, ...)" & _
"VALUES (" & val1 & "," & val2 & ","... & ")" command.CommandText = strSql command.ExecuteNonQuery() ↑回して コミット っていう作りでひとまず落ち着いています。 一応Jittaさんの提示してくださったやり方と速度は同じと考えて大丈夫ですか? |
|
投稿日時: 2005-12-02 14:43
これってバインド変数使われないから毎回解析が行われちゃいますよ
バインド変数を使いましょう strSql ="INSERT INTO table (column1, column2, ...)" & _ "VALUES (:val1, :val2, ... & ")" |
|
投稿日時: 2005-12-02 19:06
バインド変数を使ったコーディングでちゃんと動作しました。
下がそのコーディングです。 もっと勉強していつか教えられる立場になれたらと思います。 ありがとうございました。 Dim sr As StreamReader = New StreamReader(filename, Encoding.GetEncoding("SHIFT-JIS")) strSql ="INSERT INTO table (column1, column2, ...)" & _ "VALUES (:val1, :val2, ... )" command = New OracleCommand(strSql, connection) Dim OracleParameter1 As OracleParameter = New OracleParameter(":val1", OracleDbType.Varchar2) Dim OracleParameter2 As OracleParameter = New OracleParameter(":val2", OracleDbType.Int64) . . . While (streamReader.Peek() <> -1) strBuffer = streamReader.ReadLine() strVal1 = strBuffer.Substring(0, 12) command.Parameters.Add(":val1", strVal1 ) strVal2 = strBuffer.Substring(12, 12) commandIns.Parameters.Add(":val2", strVal2 ) . . . End While command.ExecuteNonQuery() streamReader.Close() |
|
投稿日時: 2005-12-02 19:36
上記方法だと.NET と Oracle の間にファイルのレコード分
ラウンドトリップが起きてしまいます。 前にも書きましたが ODP.NET には配列バインドがあります。 問題はすでに解決しているようですが、 上記の方法でパフォーマンスが出ないと思ったら試してください。 http://www.atmarkit.co.jp/fdb/rensai/odpdotnet01/odpdotnet04.html |
|
投稿日時: 2005-12-02 21:20
テストミスがあり上記のコーディングでは動作しないことが分かりました。
そこで配列バインドを使って作り直そうとしているのですが、streamReaderからはファイルに何行あるか取得できないし動的配列をうまくつくれません。 調べていると、ArrayListが使えると思ったのですが、Parametersに入れるときにキャストがうまくできません。何か良い方法はないでしょうか? 何度も申し訳ございません。 |
|
投稿日時: 2005-12-02 21:56
配列を動的に増やすなら
Redim Preserve で増やせますよ ArrayList を使いたいなら Dim Value As New ArrayList Value.Add("ABCDEFG") Value.Add("AAAAAAA") CType(Value .ToArray(), String()) でどうですか? |
|
投稿日時: 2005-12-02 22:13
内容にミスがあったので中身消しましたm(__)m[ メッセージ編集済み 編集者: たつ 編集日時 2005-12-02 22:22 ] |