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

这里有一个问题:

"WHERE VendName='@x' " &

删除'标记 - 参数化将为您解决这个问题:

"WHERE VendName= @x " &

在查询中使用'意味着将'@x'其视为字符串类型,而不是参数名称。

此外,由于您使用OleDb的是 ,因此不支持 names 参数。您需要使用?来表示查询中的参数:

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