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 のエラー
-
MT4のOrderSendでエラーになり...
-
MPI
-
テレビ画面がエラー
-
スケルトンプログラムをビルド...
-
ディスク上のサイズの乖離が大...
-
Windows版 pg_dumpの結果をログ...
-
oracle spool SJIS → UTF-8
-
エクセルのデータをアクセスに...
-
複数カラムを跨いだCOUNTができ...
-
コマンドと関数の違い
-
CSVファイルをBULK INSERTでSQL...
-
AWSのcloud9で「 ls -l ~/.ssh/...
-
PostgresSQLの環境設定について
-
createdbでいきなりつまづいて...
-
shellからpostgresqlへの変数の...
-
Oracle / UNIX ファイルコマン...
-
「ファイル名を指定して実行」 ...
-
Windows上のPostgreSQLの完全削...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
ヤフーショッピングでPayPay支...
-
socket のエラー
-
リコーimagioneo630 エラーs...
-
ソケットの異常終了について
-
C#で大量のデータを扱うソフト...
-
エクセルVBA_ADO「ファイアホー...
-
トランザクションの開始
-
関数引数に対する制限値チェッ...
-
MPI
-
SQLServerへの接続子による違い...
-
更新不要はどういう意味なので...
-
MT4のOrderSendでエラーになり...
-
fortranで文字列と数値が混在し...
-
BASP21送信エラーVB.NET
-
マインクラフトエラー
-
e-Taxで申告書送信ができません
-
Windows10更新アシスタントでエ...
-
CloseHandleのエラーについて
-
VB6からADOを介してAC...
-
e-Taxでのエラーコード AF0020-701
おすすめ情報