OleDbCommand
名前付きパラメーターをサポートしていません。@
現在のクエリで名前付きパラメーターを使用しても、その順序は重要です。現在、パラメーターは 1 つしかないため、違いはわかりません。
参照: OleDbCommand.Parameters プロパティ
CommandType が Text に設定されている場合、OLE DB .NET プロバイダーは、OleDbCommand によって呼び出される SQL ステートメントまたはストアド プロシージャにパラメーターを渡すための名前付きパラメーターをサポートしません。この場合、疑問符 (?) プレースホルダーを使用する必要があります。例えば:
SELECT * FROM Customers WHERE CustomerID = ?
したがって、 OleDbParameter オブジェクトが OleDbParameterCollection に追加される順序は、コマンド テキスト内のパラメーターの疑問符プレースホルダーの位置に直接対応している必要があります。
複数のパラメーターを使用した次の例を検討してください。
SQLStr = "SELECT * FROM TABLE_NAME WHERE ID = @ID AND NAME = @Name";
Command = new oleDbCommand(SQLStr, conn);
Command.Parameters.AddWithValue("@Name", "ABC");
Command.Parameters.AddWithValue("@ID", Request.Querystring("ID")); //'A1'
@Name
パラメータ コレクションの前に が追加されているため@ID
、クエリは次のようになります。
SELECT * FROM TABLE_NAME WHERE ID = 'ABC' AND NAME = 'A1`; //assuming ID is A1
ID が NAME パラメータの値を取得したため、NAME が ID の値を取得したため、これは間違っていることに注意してください。