OleDb Access mdb/accdb 名前付きパラメータ
いまさら Access mdb/accdb OleDb 接続で名前付きパラメータクエリ
OleDb では名前付きパラメータが使用できない。
SQL文に ? でパラメータを記述して、その順番どおりに
OleDbParameter を追加していく必要がある。
同じパラメータ値を同一SQL内で2回使用する場合でも、
2つ分のパラメータを作成することになる。面倒ぃ・・・ だがしかし
Accessでは、SQL文の前に名前付きパラメータを指定できる。
new OleDbCommand( "Parameters hoge Text, fuga Integer, piyo Date;
Select * from ... where [tbl1].[column1] = hoge ..." )
new OleDbParameter("hoge", OleDbType.VarWChar, 20)
new OleDbParameter("fuga", OleDbType.Integer)
new OleDbParameter("piyo", OleDbType.Date)
パラメータコレクションから Parameters ~ を自動生成するとよいかも。
@ をパラメータ名の先頭に付けると可読性up(オブジェクト名に使用可能な文字でござる)
Parameters @hoge Text, @fuga Integer, @piyo Date;
select * from ... where [tbl1].[column1] = @hoge ...
new OleDbParameter("@hoge", OleDbType.VarWChar, 20)
なお、長いテキスト(メモ型)は Parameters 型指定 Memo で、OleDbType.BSTR でないと
本当に長いテキスト(256文字超)を正しく処理できない???
LongVarWCharはエラーになる・・・
DataAdapter UpdateCommand/InsertCommand/DeleteCommand でも使用可能 [追記]