VB2008を使うにあたり、Oracleでも今までの直接
ソースにSQLを打ち込む方式からODPバインドという
ものを使うようになりました。そこでちょっと
落とし穴にはまり、3時間くらい悩んだので、ここに
メモを。

まず、基本的なことはOracleのドキュメントを見て、
「なるほど、まずSQL内の変数に入れて、それを
バインドという形で設定すればいいのか」という
感覚でした。そこまでは、こちらのテキストを
ご覧ください。
「意外と簡単!? .NETでOracle:oo4oからODP.NET移行編」

 そんなかたちでINSERT文やUPDATE文を書いてみたものの、
なぜかUPDATE文が通らなかったり、考えられない場所で
桁あふれを起こしている。悩んだ結果、結論は「バインドを
行うときはバインド変数名を見ているのではなく、単純に
出現順でバインドしているため」でした。

 こちらのページを見てみると、「Oracleでバインドを
使用する場合、デフォルトではSQL内の変数とバインド変数の
出現順が一致する必要がある」そうです。ただし、

oraCmd.BindByName = true;

 と設定をすることで、SQL内の変数とバインド変数の
名称を一致した形で格納することが可能になるそうで。
確かにこのコマンドを設定することで、きちんと
SQLが通るようになりました。

 うーん、わかりにくいかも。とりあえずメモでした。