OleDbでは、CommandText内のパラメータの登場順と、パラメータをAddする順が一致しないと正しく動作しない件

http://www.microsoft.com/japan/msdn/community/gdn/ShowPost-20919.htm


OleDbの場合は,パラメータ名でやれないというか,
順番に指定していかないといけないので,SQL文は,
"DELETE FROM TABLE_01 WHERE (SerialNumber = ? )";
のように ? で指定しておいて,その数だけ順番に
パラメータを指定します。
OleDbをado.netで触るとき、「@xxxxxx」のような形式でSQLのパラメータを作成しても、『パラメータ名に関係なく、OleDbCommand.Parameters.Addした順』にそのパラメータの値が決定される。

つまり、以下のようなコードを書くと、

oCmd.CommandText = "delete from TABLE01 where KEY1 = @pram2 and KEY2 = @pram1"
oCmd.Parameters.Add(New OleDbParameter("@pram1", "11111"))
oCmd.Parameters.Add(New OleDbParameter("@pram2", "22222"))
最初にaddしたパラメータが、KEY1の値を指定しているパラメータ(SQLだと@pram2の場所)になり、次にaddしたパラメータが、KEY2の値を指定しているパラメータ(SQLだと@pram1の場所)になる。