我正在尝试在简单的访问数据库中搜索数据。代码就是这个
Call connect()
con.Open()
cmd = New OleDbCommand("Select * from PO_Record_Table where Customer=asd", con)
dr = cmd.ExecuteReader
While dr.Read
MsgBox(dr(1))
End While
con.Close()
如果按搜索按钮,则错误:没有给出一个或多个必需参数的值 来这条线
dr = cmd.ExecuteReader
记录" asd"在数据库客户字段中作为文本类型。 为什么会出现此错误以及如何在没有错误的情况下完成此搜索?
答案 0 :(得分:5)
我认为错误发生在作为客户名称
的值传递的文本asd
中
cmd = New OleDbCommand("Select * from PO_Record_Table where Customer='asd'", con)
将其放在单引号中允许db引擎将其识别为字符串值,以检查Customer
列名称。如果没有引号,它将被解释为您尚未传递给命令的参数的名称。
编辑在下面的评论中,您尝试传递文本框内容作为“客户”列的值,但是您忘记在文本框文本值周围添加引号。
cmd = New OleDbCommand("Select * from PO_Record_Table where Customer='" & textbox.text & "'", con)
但是,永远不应该使用字符串连接方法,但始终使用参数化方法
cmd = New OleDbCommand("Select * from PO_Record_Table where Customer=@custName", con)
cmd.Parameters.AddWithValue("@custName", Txt_Find.Text)
dr = cmd.ExecuteReader
.....
这是查询通过用户输入获取的值传递命令文本的数据库的唯一好方法。此方法允许您的代码从SQL Injection attacks安全,并消除解析文本框内容的问题。事实上,没有参数,如果您的文本框包含单引号,字符串连接方法将失败并出现语法错误。
答案 1 :(得分:2)
没有给出一个或多个必需参数的值错误来自当您的表名或字段名称不存在时,请检查数据库中的PO_Record_Table
和Customer
拼写