Microsft SQLServerのある一つのテーブルについて、Oracle上の別テーブルの状況次第で 更新していく作業を達成しようとしています。
(いつもはSQLServerの接続はSystem.Data.SqlClientを利用するのですが 試行錯誤しているうちにOLEDBプロバイダになってしまいました...。プロバイダに拘りはありません)
『質問』
以下現在取り組んでいるコードの抜粋ですが、
「この Command に関連付けられている DataReader が既に開かれています。このコマンドを最初に閉じる必要があります。」というエラーを招いてしまいます。
接続を維持して、別データを参照し 元データ(テーブル)の更新を行う方法は どうするのが鉄板・常套手段でしょうか?
今朝方 ADO.NETのDataAdapter・DataSet・DataTableで トライしていたのですが、元データのループを形成しようとデータセットを作る部分で やはりコネクションを閉じることになってしまい ダメだ~ と諦めてしまいました。
なんか参考になる記事の紹介でも結構です。どういう手続きを行えばよいか ヒントを頂けないでしょうか
VB
1Try 2 Dim prov As String = "XXX" 3 Dim serverName As String = "XXX" 4 Dim dataBase As String = "XXX" 5 Dim userid As String = "XXX" 6 Dim pwd As String = "XXX" 7 8 Using conn As New OleDb.OleDbConnection() 9 Using cmd1 As New OleDb.OleDbCommand() 10 conn.ConnectionString = 11 " Provider = " & prov & 12 ";Data Source = " & serverName & 13 ";Initial Catalog = " & dataBase & 14 ";User ID = " & userid & 15 ";Password =" & pwd 16 17 Dim dr As OleDbDataReader = Nothing 18 cmd1.Connection = conn 19 conn.Open() 20 21 cmd1.CommandText = "SELECT * FROM SFA51 WHERE CHK_FLG IS NULL" 22 dr = cmd1.ExecuteReader() 23 While (dr.Read()) 24 Dim SqlString1 As String = "SELECT * FROM 取引先 WHERE コード='" & dr.Item(9) & "'" 25 26 Using cn As New OracleConnection(CnString) 27 cn.Open() 28 Using cmd2 As New OracleCommand 29 Dim rd As OracleDataReader = Nothing 30 cmd2.Connection = cn 31 cmd2.CommandText = SqlString1 32 rd = cmd2.ExecuteReader 33 If rd.Read Then 34 Else 35 GoTo next_rec 36 End If 37 38 Try 39 '検疫OKの証を SFA51テーブル上のチェックフラグに更新 40 cmd1.CommandText = "UPDATE SFA51 SET CHK_FLG=2, CHK_TIMESTAMP=CURRENT_TIMESTAMP WHERE APPNO=? AND APPLINEO=?" 41 42 cmd1.Parameters.Add("@APPNO", OleDb.OleDbType.VarChar).Value = dr.Item(0) 43 cmd1.Parameters.Add("@APPLINENO", OleDb.OleDbType.VarChar).Value = dr.Item(1) 44 cmd1.ExecuteNonQuery() 45 Catch ex As Exception 46 System.Diagnostics.Debug.Print(ex.Message ) '★エラー表示部分★ 47 End Try 48 If Not rd Is Nothing Then 49 rd.Close() 50 End If 51 52 End Using 53 cn.Close() 54 55 End Using 56next_rec: 57 End While 58 59 60 End Using 61 62 End Using 63 64Catch ex As Exception 65 Console.WriteLine(ex.Message) 66 67End Try
回答2件
あなたの回答
tips
プレビュー