0
statement = "SELECT OrderID, (SELECT VendName FROM Vendors WHERE Vendors.VendorID = Orders.VendorID) " &
                        ",OrderDt, RcvdDt, OrderTotal " &
                        "FROM Orders " &
                        "WHERE VendName=? " &
                        "ORDER BY OrderDt DESC"

Dim cmd As New OleDbCommand(statement, connection)
cmd.Parameters.AddWithValue("VendName", txtVendorFilter.Text)
Dim reader As OleDbDataReader = cmd.ExecuteReader(CommandBehavior.Default)

以前は、テキストボックスの値をSQLに直接連結することでこれを実行しようとしていましたが、「必要なパラメーターに値が指定されていません」というメッセージが表示され、代わりにパラメーター化されたクエリを使用する必要があることを読みました。だから私はこれを試しましたが、エラーは発生しませんが、リーダーには何も含まれていません。私はこれまでパラメータ化されたクエリを使用したことがないので、これが機能しない理由について少し迷っています。

編集:上記のコードを変更して、OLEDBがどのように機能するかについて簡単に読んだものから説明しました。これにより、「必要なパラメーターに値が指定されていません」というメッセージが再び表示されます。

4

1 に答える 1

3

1つの問題はここにあります:

"WHERE VendName='@x' " &

マークを削除し'ます-パラメータ化がこれを処理します:

"WHERE VendName= @x " &

'クエリでinを使用すると'@x'、パラメータ名ではなく文字列型として扱われます。

さらに、を使用しているためOleDb、namesパラメーターはサポートされていません。?クエリでパラメータを示すために使用する必要があります。

"WHERE VendName= ? " &
于 2012-04-15T20:21:48.303 に答える