2

もしあれば、パラメータを渡す次の方法の違いは何ですか。

SQLStr = "SELECT * FROM TABLE_NAME WHERE ID = ? "
command = new oleDbCommand(SQLStr, conn)
Command.Parameters.AddWithValue("@ID", Request.Querystring("ID"))

対。

SQLStr = "SELECT * FROM TABLE_NAME WHERE ID = @ID "
Command = new oleDbCommand(SQLStr, conn)
Command.Parameters.AddWithValue("@ID", Request.Querystring("ID"))

この例ではないかもしれませんが、これら 2 つのメソッドは異なる意味を持つのでしょうか? おそらく、同じ値を 2 回渡す必要があり、同じ変数名を使用したくなるような場合でしょうか?

ありがとう。

4

1 に答える 1

3

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 の値を取得したため、これは間違っていることに注意してください。

于 2014-08-22T18:31:31.783 に答える