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,我简要介绍了它应该如何工作,并且它给了我“再没有给出所需参数的值”。
答案 0 :(得分:3)
这里有一个问题:
"WHERE VendName='@x' " &
删除'
标记 - 参数化将为您解决此问题:
"WHERE VendName= @x " &
在查询中使用'
意味着'@x'
被视为字符串类型,而不是参数名称。
此外,由于您使用的是OleDb
,因此不支持名称参数。您需要使用?
来表示查询中的参数:
"WHERE VendName= ? " &