参数化查询在VB中不起作用

时间:2012-04-15 20:20:51

标签: sql vb.net parameterized-query

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,我简要介绍了它应该如何工作,并且它给了我“再没有给出所需参数的值”。

1 个答案:

答案 0 :(得分:3)

这里有一个问题:

"WHERE VendName='@x' " &

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

"WHERE VendName= @x " &

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

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

"WHERE VendName= ? " &