プロが教えるわが家の防犯対策術!

VB2008+Access2003でプログラムを組んでいます。
VB2008の経験は2年位です。
MDBテーブルへの削除・更新処理で疑問がわいてきましたので質問いたします。
ご回答よろしくお願いいたします。
MDBへの接続処理は省略しています。
  
下記のトランザクション処理で正常に削除・更新されますが
Disposeしないコマンド(Cmd42)の使い回しに問題はありませんか?
  
Dim Cn As New OleDb.OleDbConnection
Dim RsTran As OleDb.OleDbTransaction

Try

   RsTran = Cn.BeginTransaction

   Me.Cmd42 = Cn.CreateCommand
   Me.Cmd42.Transaction = RsTran

   Me.Cmd42.CommandText = "DELETE * FROM 売上テーブル " _
       & " Where (MitumoriNo = '" & Insatu_MitumoriNo & "') "
   Me.Cmd42.ExecuteNonQuery()

   Me.Cmd42.CommandText = "DELETE * FROM 売上サマリーテーブル " _
       & " Where (MitumoriNo = '" & Insatu_MitumoriNo & "') "
   Me.Cmd42.ExecuteNonQuery()

   Me.Cmd42.CommandText = "DELETE * FROM 請求合計テーブル " _
       & " Where (MitumoriNo = '" & Insatu_MitumoriNo & "') "
   Me.Cmd42.ExecuteNonQuery()

   Me.Cmd42.CommandText = "UPDATE 見積書テーブル " _
       & " SET KousinDay='" & dumy & "' " _
       & " Where (MitumoriNo = '" & Insatu_MitumoriNo & "') "
   Me.Cmd42.ExecuteNonQuery()

   RsTran.Commit()
   MessageBox.Show(Me, "削除しました")

Catch ex As Exception

   RsTran.Rollback()
   MessageBox.Show(ex.Message)
   Call 終了処理()

End Try

Me.Cmd42.Dispose()
RsTran.Dispose()

A 回答 (2件)

> Disposeしないコマンド(Cmd42)の使い回しに問題はありませんか?



動けばいいのであれば、「正常に削除・更新されます」という答えが出ていますね。

品質の観点から問題はあるでしょう。

(1)関数の外で宣言した変数を使いまわしている。

変数のスコープが適切でない。
42が意味不明。

(2)インスタンスを使いまわして、ExecuteNonQueryを4回実行している。

気持ち悪いけど、MSDNにサンプルが載っているし問題ないのかな?
当方では、Commandのインスタンスを使いまわすことはしません。

http://msdn.microsoft.com/ja-jp/library/2k2hy99x …
http://ja.wikipedia.org/wiki/ソフトウェア品質
    • good
    • 0

 Me.Cmd42 = Cn.CreateCommand


で「新しいcommandのインスタンス」が作られるので、使い回しているわけではありません。

ですけど、cmd42をメンバ変数として定義する意味ってあります?
ローカル変数で十分だと思うのですが
    • good
    • 0

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