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
No.1ベストアンサー
- 回答日時:
推測ですが、Dispose しない場合、
Cmd.CommandType = CommandType.StoredProcedure
の状態で SQL を実行しているからではないでしょうか。
Dispose しなくても、Point2 の直前に
Cmd.CommandType = CommandType.Text
を入れるといいのではないでしょうか。
確かに「Cmd.CommandType = CommandType.Text」を入れたら問題なく進みました。
「Cmd.CommandType = CommandType.Text」は規定値に戻したという事になるのでしょうか?
ちなみに、私の勘違いかDisposeしてもエラーが出ておりました。。。すみません。
ありがとうございました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) ExcelVBAのマクロについて。 9 2022/05/04 14:50
- その他(Microsoft Office) マクロVBAについて 1 2022/09/06 18:12
- Visual Basic(VBA) 九九の答えの計算 3 2022/12/20 22:13
- Visual Basic(VBA) batからexeを実行し戻り値を受け取る バッチからEXEの結果を受け取りたいのですが、 下記のバッ 1 2023/07/04 15:13
- Visual Basic(VBA) batからexeを実行し戻り値を受け取る EXEの実行内容の結果によって、戻り値を0か1かで返したい 1 2023/07/04 16:40
- Visual Basic(VBA) いつもお世話になっております、VBAで教えて頂きたいのですが 2 2022/05/05 22:20
- Excel(エクセル) VBA フォルダ見える化のコードについて 2 2023/06/19 15:04
- Visual Basic(VBA) VBAで質問ですが、皆さんはどの様に導き出しているのでしょうか? 6 2022/05/03 21:53
- Visual Basic(VBA) VBAが止まります。 2 2022/09/02 14:02
- Visual Basic(VBA) VBA リボンののリカバリーでオーバーフローエラーになります 2 2023/07/04 19:07
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
ヤフーショッピングでPayPay支...
-
socket のエラー
-
エクセルVBA_ADO「ファイアホー...
-
リコーimagioneo630 エラーs...
-
トランザクションの開始
-
MT4のOrderSendでエラーになり...
-
テレビ画面がエラー
-
VB.NET Webアプリケーションの...
-
ディスク上のサイズの乖離が大...
-
oracle spool SJIS → UTF-8
-
エクセルVBAでUWSCを使う
-
CSVファイルをBULK INSERTでSQL...
-
PostgreSQLについて教えてくだ...
-
Windows版 pg_dumpの結果をログ...
-
Query OK, 0 rows affected
-
ACCESSのフォームだけを起動す...
-
date型に空白を入れるとエラー...
-
エクセルのデータをアクセスに...
-
DB2のbindコマンドの"+o""-o"オ...
-
ACCESS VBA;コマンドボックス...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
ヤフーショッピングでPayPay支...
-
socket のエラー
-
リコーimagioneo630 エラーs...
-
ソケットの異常終了について
-
C#で大量のデータを扱うソフト...
-
トランザクションの開始
-
エクセルVBA_ADO「ファイアホー...
-
関数引数に対する制限値チェッ...
-
SQLServerへの接続子による違い...
-
MPI
-
更新不要はどういう意味なので...
-
MT4のOrderSendでエラーになり...
-
fortranで文字列と数値が混在し...
-
BASP21送信エラーVB.NET
-
マインクラフトエラー
-
e-Taxで申告書送信ができません
-
CloseHandleのエラーについて
-
Windows10更新アシスタントでエ...
-
VB6からADOを介してAC...
-
VB.NET Webアプリケーションの...
おすすめ情報