2011-11-14 13 views
1

私はOleDbを使用してDataTableを作成しています。パラメータ化されたクエリを使用しようとしていますが、OleDbDataAdapterでは機能しないようです。誰でも何か提案がありますか?C#でOleDbDataAdapterでパラメータを使用する

cmd.CommandText = "SELECT A,B,C,D FROM someTable WHERE [email protected] AND D BETWEEN @D1 AND @D2"; 
cmd.Parameters.Add("@A", OleDbType.VarChar).Value = "1234567"; 
cmd.Parameters.Add("@D1", OleDbType.DBDate).Value = "02/01/2011"; 
cmd.Parameters.Add("@D2", OleDbType.DBDate).Value = "01/31/2012"; 

A first chance exception of type 'System.Data.OleDb.OleDbException' occurred in System.Data.dll 
System.Data.OleDb.OleDbException (0x80040E11): [DB2] SQL0206N "@A" is not valid in the context where it is used. SQLSTATE=42703 
+0

「A」列は数字ではなくテキストフィールドですか。 D1とD2のパラメータ値は、文字列ではなく日付である必要があります。 – LarsTech

答えて

4

http://msdn.microsoft.com/en-us/library/system.data.oledb.oledbparameter.aspxを参照してください:

"OLE DB.NET Frameworkデータプロバイダーは疑問符が付いている位置パラメータを使用して代わりに名前付きパラメータの(?)。"

@Parameter構文を使用できないため、疑問符でパラメータを指定し、クエリに表示されている順序とまったく同じ順序でパラメータ値を割り当てる必要があります。

+0

これは当てはまりますが、パラメータは整っています。それでも動作するはずです。 – LarsTech

+0

文書には疑問符を使用しなければならないと書かれているので、それに応じてはいけません。 –

+1

私は100万回もやった。名前付きパラメータはサーフェス上で動作しますが、背後では疑問符ですので、「順序」は重要です。マイクロソフトはそれをかなりうまくやった。 – LarsTech

-1
public static DataTable getDataGridList(string strCmd) 
    { 

     openConnection(conn); 
     OleDbDataAdapter DADet = new OleDbDataAdapter(strCmd, conn); 
     DataTable DTDet = new DataTable(); 
     DADet.Fill(DTDet); 
     closeConnection(conn, null); 
     return DTDet; 
    } 
+1

ようこそ。コードだけでなく、言葉で答えを説明してください。あなたは何を提案していますか?質問のコードとどのように違うのですか? –