VB2010でプログラム開発を行っています。 VB2010は初心者で、インターネットを使って調べながら構築していますので、ほとんど意味を理解していない状態です。 この度下記の文を書いたのですが、Point1で「Cmd.Dispose() 」を入れないとPoint2で「OleDbException が発生しました エラーを特定できません」のエラーになってしまいます。 そこで2つの疑問が出てきたので教えていただけないでしょうか。 疑問1: なぜ、Point1でDisposeしないとエラーになってしまうのか。 疑問2: Point1でDisposeすると、内容が破棄されると思っていたのですが、そのまま処理が進むようです。 なぜ、再度「Dim Cmd As New OleDbCommand」の宣言が必要無く、トランザクションも続いているのでしょうか。 また、よりスマートな書き方があればご教授いただけるとありがたいです。 よろしくお願いします。 Module Module1 Public Con As New OleDbConnection Public Cmd As New OleDbCommand Public bTrans As OleDb.OleDbTransaction Public sb As New System.Text.StringBuilder() End Module Private Sub Btn_Kanryo_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Btn_Kanryo.Click Dim ExResult AS Integer '新規トランザクションの開始。 bTrans = Con.BeginTransaction 'コマンドオブジェクトにトランザクション関連付け Cmd.Transaction = bTrans 'DB更新1 sb = New System.Text.StringBuilder sb.AppendLine("UPDATE A ") sb.AppendLine("SET") sb.AppendLine(" A_AA = '1'") sb.AppendLine(" WHERE") sb.AppendLine(" A_BB='123'") Cmd.Connection = Con Cmd.CommandText = sb.ToString ExResult = Cmd.ExecuteNonQuery() 'ストアドプロシージャ―処理 Cmd.Connection = Con Cmd.CommandType = CommandType.StoredProcedure Cmd.CommandText = "AAA.ABC" Dim outPara As New OleDbParameter("ERR_FLG", OleDbType.Decimal) outPara.Direction = ParameterDirection.Output Cmd.Parameters.Add(outPara) Cmd.ExecuteNonQuery() Point1⇒ Cmd.Dispose() 'DB更新2 sb = New System.Text.StringBuilder sb.AppendLine("DELETE ") sb.AppendLine(" B") sb.AppendLine(" WHERE ") sb.AppendLine(" B_AA='1'") Cmd.Connection = Con Cmd.CommandText = sb.ToString Point2⇒ ExResult = Cmd.ExecuteNonQuery() bTrans.Commit() End Sub
↧