スキップしてメイン コンテンツに移動

OleDbParameterはSQLの順番どおりにしないとダメ。

今日ハマったこと。
VB.NET 2008でDBへの更新SQLを書いたのだけど、なんでかAffectedRowが0。つまり更新されない。

SQLは↓こんな感じ。

UPDATE table1 SET
name = @p_name,
memo = @p_memo
WHERE
id = @p_id

で、OleDbCommandにOleDbParameterをセットしていた行が↓こんな感じ。

oCmd = conn.CreateCommand()
:   :
oCmd.Parameters.Add( New OleDbParameter("@p_id",Me.ID) )
oCmd.Parameters.Add( New OleDbParameter("@p_name",Me.Name) )
oCmd.Parameters.Add( New OleDbParameter("@p_memo",Me.Memo) )
:   :
oCmd.ExecuteNonQuery()

こう書いたらうまくUpdateできませんでした。
原因はタイトルの通り、SQLの順番通りにOleDbParameterをAddしないとダメだということ。

つまり

oCmd.Parameters.Add( New OleDbParameter("@p_id",Me.ID) )
oCmd.Parameters.Add( New OleDbParameter("@p_name",Me.Name) )
oCmd.Parameters.Add( New OleDbParameter("@p_memo",Me.Memo) )
oCmd.Parameters.Add( New OleDbParameter("@p_id",Me.ID) )

こうしないとダメだったようで。
じゃあOleDbParameterのコンストラクタの1番目の引数は一体なんの意味があるんだろうか・・。

2009.07.24. 23:33 追記
AffectedRowsが0じゃなくてException吐いたのかもしれないです。
確か「条件式のデータ型が合わない為、抽出できません」とか、そんな感じの例外(失念)。
抽出というキーワードに反応しすぎてWHERE句の部分だけ何度も調べたりいじったり(いじりようがないほどシンプルなSQLだけど)してて、あんまりはっきり覚えてないです。すんません。

コメント

このブログの人気の投稿

【VS2019】ある日急にデザイナーがエラーを吐いた時の対処メモ

仕事でVisual Studio 2019 Communityを使う時があるのですが、ある時、前日まで普通に使えていたプロジェクトのうち、フォームのデザイナがエラーを起こしてしまいました。 --- データが失われる可能性を防ぐため、デザイナーの読み込み前に以下のエラーを解決する必要があります。 このファイルのデザイナーに、デザインできるクラスがないため、デザイナーを表示できませんでした。 --- こんなメッセージが。 結論から言うと直ったのですが、この現象への対処法を調べましたのでまとめます。

今更ながらマキシマムザホルモン「絶望ビリー」出演者が誰なのか調べてみた

ふと思い立ってマキシマムザホルモンの「絶望ビリー」のPVに登場する人たちを調べてみました。 ・・・といっても下記の二組(というか一組と一人)は不明なままです。 【不明な人たち】 ・アコギの二人組 ・フェンスを叩いて叫んでいるマッチョな人 ・アナウンサー ・クイズ番組の回答者(一人は亮君だけど) 【判明した出演者】 ・ビジュアル系のバンド・・・ PARFAIT (複数のサイトで確認。たぶん合ってる) ・アイドル系の女の子・・・ 辰巳 奈都子 ・ヒップホップ系の二人組・・・アンディとジョージ☆(というらしい。真偽不明) ・ギターを弾いて歌っている女性・・・ KIKU ( THE SWEET TRIP というバンドのvo/g) というわけで、全員はわかりませんでした。 個人的にはKIKUという人のギターの弾き方が気になっていたので、名前がわかって良かったですw

Skype複数端末で同期されない時はweb版にアクセスするといい(かも)

タイトルですべてを語ってしまいましたが、どうも経験上そんな気がします。 2020年5月現在、新型コロナウィルスの影響を受けて在宅業務をしているのですが、同僚との主なやり取りはSkypeを介して行っています。 しかも使っているのは3端末。 自前のMac ... テキストでのやり取りは主にここで。 会社貸与のWindows ... vpn+rdpで使っていて、そのrdp先でのSkype。ファイルのやり取りがあるので。 自前のiPhone ... 離席中やビデオ通話に使う。 さてこのSkype、すべて同じアカウントで使っているのですが、どうもたまにログが同期しないのです。 Macでやり取りしたメッセージがWindowsやiPhone側に表示されなかったりしています(あくまで一例で、機種は関係ないっぽい)。 何かのタイミングで急に同期したりするのですが、これが頻繁に起きるとけっこう不便なんですよね。 で、あれこれ試した結果、web版のSkypeにアクセスすると、急にログが同期することに気が付きました。 web版Skypeはこちら。 https://web.skype.com/ どういう仕掛けはよくわかりませんが、複数端末で同一アカウント環境下でログが同期されない場合、一度アクセスしてみてはどうでしょうか。 ・・・というか、だったら何処かひとつの端末はweb版にしておけばいいのかw