- 題名: OleDbCommandで同じ名前のパラメータがあるとエラーになってしまう
- 日時: 2007/05/08 18:01:08
- ID: 19664
- この記事の返信元:
- (なし)
- この記事への返信:
- [19665] Re[1]: OleDbCommandで同じ名前のパラメータがあるとエラーになってしまう2007/05/08 18:26:45
- ツリーを表示
OleDbCommandの場合、パラメータコレクションの方には任意の名前のパラメータを定義できますが、 コマンドテキストには順番に展開されるプレースホルダとして動作するパラメータマーカ「?」しか 記述できなかったかと思うのですが。(私の勘違い?) コマンドテキストで 「:名」を使えるのはOracleCommand、 「@名」を使えるのはSqlCommand、 だったかと。 そして、パラメータマーカ「?」を使う場合、 パラメータコレクション側の名前は任意につけられますが コマンドテキストとの関係上名前に意味がなくなるためパラメータコレクションの数は コマンドテキスト上の「?」の数と一致する必要があります。
分類:[.NET]
2007/05/08(Tue) 18:34:19 編集(投稿者)
OleDbCommandで同じ名前のパラメータがあるとエラーになってしまう。
OleDbConnection、OleDbCommandを使用して、下記の様に同じパラメータがあるSQLを実行すると
「保護されているメモリに読み取りまたは書き込み操作を行おうとしました。他のメモリが壊れていることが考えられます。」
とエラーが出てしまいます。
(com.ExecuteReader();でエラーになります。)
OleDbCommandでSQL文に同じパラメータは使用出来ないんでしょうか?
string sql = "select * from dual where 'A' = :P_TEST OR 'B' = :P_TEST";
string connectionString = "Provider=OraOLEDB.Oracle.1;Persist Security Info=False;User ID=****;Password=****;Data Source=****;";
using (System.Data.OleDb.OleDbConnection con = new System.Data.OleDb.OleDbConnection(connectionString))
{
con.Open();
using (System.Data.OleDb.OleDbCommand com = new System.Data.OleDb.OleDbCommand(sql, con))
{
com.Parameters.Add("P_TEST", System.Data.OleDb.OleDbType.VarChar);
com.Parameters["P_TEST"].Value = "A";
com.ExecuteReader();
}
}
以上、よろしくお願いします。