質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
VB.NET

Microsoft Visual Basic .NETのことで、Microsoft Visual Basic(VB6)の後継。 .NET環境向けのプログラムを開発することができます。 現在のVB.NETでは、.NET Frameworkを利用して開発を行うことが可能です。

Q&A

2回答

13124閲覧

vb.net のエラーメッセージについて

k_mail

総合スコア90

VB.NET

Microsoft Visual Basic .NETのことで、Microsoft Visual Basic(VB6)の後継。 .NET環境向けのプログラムを開発することができます。 現在のVB.NETでは、.NET Frameworkを利用して開発を行うことが可能です。

0グッド

0クリップ

投稿2017/04/14 01:16

自己学習でマスタ登録の画面を作っています。

ReaderResult = sqlcmd.ExecuteReader()

を実行するとtry catch に引っかかります。

エラーメッセージとしては
”ExecuteReader は、コマンドに割り当てられた接続が保留状態であるローカルのトランザクションにあるとき、トランザクション オブジェクトを持つコマンドが必要です。コマンドの Transaction プロパティがまだ初期化されていません。”
です。

処理としましては、一番初めにselect文で最新表示をdatagridview に
表示しています。その後、insert文で登録しようとすると
上記のエラーが表示されます。

ネットで原因を調べると、
・コネクションを内部で使いまわしている
・トランザクションが設定されていない
では、というものがありました。
しかし、毎回、dbを開いて、コネクションを作っていますし、
select文にはデータを取るだけなので、トランザクションをする必要はないと考えており、トランザクションを設定してません。

自分もコピペで、つぎはぎで作成しているので、分かりづらいと思いますが、ご教授お願いします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

推測ですが、sqlcmdを作っているConnectionがトランザクションを持っており、それがCommitあるいはRollBackされていないのではないかと。

ただ、他の方が仰っているように、ちょっとこの情報だけでは「あくまでも推測」としか言えません。

投稿2017/04/14 05:42

cauliflowerjoe

総合スコア102

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

情報が不足しているので追記しないと回答は得られづらいかと思います。

しかし、毎回、dbを開いて、コネクションを作っていますし、
select文にはデータを取るだけなので、トランザクションをする必要はないと考えており、トランザクションを設定してません

どのようなDBなのか、どうconnectionを張っているのか(DSNの書式など)などの詳細が必要です。

確かにSELECTにはトランザクションをかける必要はありません。しかしDirtyReadなど別のDBユーザのトランザクションによって発生する状況などもあります(DirtyReadでエラーは発生しないとは思いますが予想外の結果が返ってくる可能性はあると認識しています)。

ざっくりいうとソースレベルで(機密は隠して)問い直してみてはいかがでしょうか。

投稿2017/04/14 01:28

VB_Beginner

総合スコア19

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問