2007/01/11

ODP.NETでのSQLバインドで発見したTips

問題が解決したのでメモメモ。
ODP.NETのバインド方法について。

OracleCommandにBindByNameというプロパティがある。
FalseはOracleParameterCollectionにAddされた順番でのバインドをサポート。
Trueはバインド変数名でのバインドをサポート。
デフォルトはFalse。

BindByNameがFalseの場合、バインド変数名を使用してもあくまでOracleParameterCollectionにAddされた順番でしかバインドしてくれない。しかもこれがエラーにならないから困り者。。。

今のソースはバインド変数を使ってるけど、SQLのバインド変数の出現順がParameter#Addの順序と一致していた為、奇跡的に動いているみたい。条件によりパラメータが1つ増える処理を流した時に結果が意図したものにならないからおかしいなと思ったけど。トラックしてて、はまった・・・。

教訓。
バインド変数を使用してSQLバインドする場合、OracleCommand#BindByNameは必ずTrueを指定するようにする。

0 件のコメント: