- PR -

ODP.NETでバインド変数を使用したテーブルの更新方法

1
投稿者投稿内容
VIVIENNE
常連さん
会議室デビュー日: 2004/08/18
投稿数: 21
投稿日時: 2004-08-18 17:12
はじめまして、よろしくお願いします。

現在、わたしはVB5.0で作成された現行システムを
VB.NETにコンバージョンするという作業を行っています。

そこで、現行ではDBの接続をoo4oを使用して行っていたのですが、
ODP.NETを使用することになりました。

現行のシステムでは、バインド変数を使用してSQL文を
発行しているのですが、UPDATE文について、
バインド変数を使用すると、期待する結果を得ることができませんでした。
バインド変数を使用しなければ、よいのですが
現行のSQL文を変更したくないので、バインド変数を
使用したまま、UPDATE文の実行ができる方法を
ご存知の方がいらっしゃいましたら、力を貸していただきたいと思っています。

コードは下記のようになってます。

  Dim Cmd As New Oracle.DataAccess.Client.OracleCommand

  Cmd.CommandText = "UPDATE TABLE SET BBB = :BBB WHERE AAA = :AAA"

  Param1.ParameterName = "AAA"
  Param1.OracleDbType = Oracle.DataAccess.Client.OracleDbType.String
  Param1.Value = "01"
  Param1.Size = 2
  Cmd.Parameters.Add(Param1)

  Param2.ParameterName = "BBB"
  Param2.OracleDbType = Oracle.DataAccess.Client.OracleDbType.String
  Param2.Value = "CHANGE"
  Param2.Size = 10
  Cmd.Parameters.Add(Param2)

  Cmd.ExecuteNonQuery

-------

実行時にエラーが出ることはありませんが、レコードが更新されません。

ためしに、SQLの「:BBB」のバインド変数の部分に、文字を
直打ちしてみたら、レコードは更新されました。

バインド変数を使用した、更新はできないのでしょうか?
ご存知の方がいらっしゃいましたら、お力をお貸しいただけますよう
よろしくお願いいたします。
Jitta
ぬし
会議室デビュー日: 2002/07/05
投稿数: 6267
お住まい・勤務地: 兵庫県・海手
投稿日時: 2004-08-19 08:40
 パラメータに追加する順番を、反対にしてみたらどうでしょう?
引用:

VIVIENNEさんの書き込み (2004-08-18 17:12) より:

  Dim Cmd As New Oracle.DataAccess.Client.OracleCommand

  Cmd.CommandText = "UPDATE TABLE SET BBB = :BBB WHERE AAA = :AAA"

  Param2.ParameterName = "BBB"
  Param2.OracleDbType = Oracle.DataAccess.Client.OracleDbType.String
  Param2.Value = "CHANGE"
  Param2.Size = 10
  Cmd.Parameters.Add(Param2)

  Param1.ParameterName = "AAA"
  Param1.OracleDbType = Oracle.DataAccess.Client.OracleDbType.String
  Param1.Value = "01"
  Param1.Size = 2
  Cmd.Parameters.Add(Param1)

  Cmd.ExecuteNonQuery

Ten.
ベテラン
会議室デビュー日: 2003/04/03
投稿数: 67
投稿日時: 2004-08-19 09:22
ODP.NETはデフォルトでは「名前」ではなく「位置」でバインドするようです。

OracleCommandのBindByNameプロパティをTrueに設定すれば名前でバインドしてくれます。
VIVIENNE
常連さん
会議室デビュー日: 2004/08/18
投稿数: 21
投稿日時: 2004-08-19 10:03
回答ありがとうございました。

ご指摘の通りやって見ましたら、できました。

本当に助かりました。
ありがとうございました。
1

スキルアップ/キャリアアップ(JOB@IT)