【问题标题】:SQL SELECT query not working with parameters, but works fine with concatenationSQL SELECT 查询不能使用参数,但可以很好地连接
【发布时间】:2017-02-13 15:33:55
【问题描述】:

我正在尝试根据从 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")

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

sql = "SELECT [Customer_Name] FROM [Customers] WHERE [Customer_Code] = '" & cmbCustomer.Text & "'"
Dim cmd As New OleDb.OleDbCommand(sql, con)

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")

第一种方法有什么明显的地方我错过了吗?如果不是,为什么这种方式不起作用?

【问题讨论】:

  • 应该是cmd.Parameters.Add("@code", cmbCustomer.Text);
  • 我相信你最好改用 Parameter.AddWithValue
  • 你想在哪里运行这个查询?直接,来自表格或报告?
  • @SteveSmith 不,我的其他查询都没有分号,它们都可以正常工作
  • @apomene 不,AddWithValue 不是最好的方法,它必须尝试匹配最好的数据类型,这可能会导致问题

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


【解决方案1】:

这是因为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)

【讨论】:

  • 哇,是的,多么愚蠢。也谢谢你的解释,下次我会更小心的!
猜你喜欢
  • 1970-01-01
  • 2020-10-16
  • 1970-01-01
  • 2017-09-10
  • 2022-06-30
  • 2012-01-01
  • 2013-12-12
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多