SQL SELECT查询不使用参数,但在串联时工作正常

时间:2017-02-13 15:33:55

标签: sql vb.net ms-access select parameters

我正在尝试根据# do stuff in parent if not result.empty(): event = result.get() # process event as above and terminate if `None` 中选定的代码选择客户的名称。当我运行以下代码时,我收到一条错误消息,指出一个或多个必需参数没有值。

ComboBox

但是,当我运行相同的查询但没有参数时,它可以正常工作。

sql = "SELECT [Customer_Name] FROM [Customers] WHERE [Customer_Code] = @code"
Dim cmd As New OleDb.OleDbCommand(sql, con)
cmd.Parameters.Add("@code", OleDb.OleDbType.VarChar).Value = cmbCustomer.Text

Dim da As New OleDb.OleDbDataAdapter(sql, con)
Dim ds As New DataSet

da.Fill(ds)

txtCustomer.Text = ds.Tables(0).Rows(0).Item("Customer_Name")

是否有一些非常明显的东西让我错过了第一种做法?如果没有,为什么这种方式不起作用?

1 个答案:

答案 0 :(得分:4)

这是因为OleDbDataAdapter

您正在设置DataAdapter以获取sql的字符串,以及con的连接,这意味着cmd.Parameter未与其一起传递。

所以你的代码会寻找da.SelectCommand.Parameters.Add

你需要

da.SelectCommand.Parameters.Add("@Code", OleDb.OleDbType.VarChar).Value = cmbCustomer.Text

或者

Dim da As New OleDb.OleDbDataAdapter(cmd)