没有给出一个或多个必需参数的值.搜索期间出错

Ahm*_*zan 2 vb.net ms-access

我试图在一个简单的访问数据库中搜索数据.代码是这样的

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()
Run Code Online (Sandbox Code Playgroud)

如果我按下搜索按钮,则错误:此行上没有给出一个或多个必需参数的值

dr = cmd.ExecuteReader
Run Code Online (Sandbox Code Playgroud)

记录"asd"在数据库客户字段中作为文本类型.为什么会出现此错误以及如何在没有错误的情况下完成此搜索?

Ste*_*eve 5

我想错误是在asd 作为客户名称的值传递的文本中

cmd = New OleDbCommand("Select * from PO_Record_Table where Customer='asd'", con)
Run Code Online (Sandbox Code Playgroud)

将其放在单引号中允许db引擎将其识别为要检查Customer列名称的字符串值.如果没有引号,它将被解释为您尚未传递给命令的参数的名称.

编辑在下面的评论中,您尝试将"文本框"的内容作为"客户"列的值传递,但是您忘记在文本框文本值周围添加引号.

cmd = New OleDbCommand("Select * from PO_Record_Table where Customer='" & textbox.text & "'", con)
Run Code Online (Sandbox Code Playgroud)

但是,永远不应该使用字符串连接方法,但始终使用参数化方法

cmd = New OleDbCommand("Select * from PO_Record_Table where Customer=@custName", con)
cmd.Parameters.AddWithValue("@custName", Txt_Find.Text)
dr = cmd.ExecuteReader
.....
Run Code Online (Sandbox Code Playgroud)

这是查询通过用户输入获取的值传递命令文本的数据库的唯一好方法.此方法允许您的代码安全地免受SQL注入攻击,并消除解析文本框内容的问题.事实上,如果没有参数,并且文本框包含单引号,则字符串连接方法将失败并出现语法错误.