2012-04-15 12 views
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に連結して「必要なパラメータに値は指定されていません」というメッセージが表示されていました。代わりにパラメータ化されたクエリ。だから私はこれを試して、それは私にエラーを与えることはありませんが、読者は決してそこに何も持っていない。以前はパラメータ化されたクエリを使ったことがなかったので、なぜこれが機能していないのか分からなくなりました。VBでパラメータ化されたクエリが機能しない

編集: 私は、上記のコードをOLEDBの説明に変更しましたが、これはどのように動作するべきかを簡単に読んだところで、「必要なパラメータは指定されていません。

答えて

3

一つの問題はここにある:

"WHERE VendName='@x' " & 

'マークをドロップ - パラメータ化はあなたのためにこれの世話をします。

"WHERE VendName= @x " & 

'を使用するクエリでは、'@x'は次のように扱われることを意味します文字列型であり、パラメータ名ではありません。

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

"WHERE VendName= ? " & 
+0

ありがとう。私はこれをして、今度はもう一度、実行中の読者に、1つ以上の必要なパラメータに値が与えられていないと言ってエラーを出す... – Tomcat

+0

@ user1335008 - 私はあなたがOleDbを使用していることを忘れていました。回答が更新されました。 – Oded

関連する問題