今日ハマったこと。
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だけど)してて、あんまりはっきり覚えてないです。すんません。
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だけど)してて、あんまりはっきり覚えてないです。すんません。
コメント