Vb.net 搜索按钮出错

Vb.net 搜索按钮出错,vb.net,ms-access,Vb.net,Ms Access,我搜索了一些关于如何在VB.net中执行搜索按钮的代码。但不知怎的,它不会工作,因为一个错误。仅仅是因为,我无法理解它的算法和功能。我是新手。无论如何,以下是搜索按钮的代码: Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click myConnection.Open() crd.Clear() fn.Clear() ln.Clear() Dim st

我搜索了一些关于如何在VB.net中执行搜索按钮的代码。但不知怎的,它不会工作,因为一个错误。仅仅是因为,我无法理解它的算法和功能。我是新手。无论如何,以下是搜索按钮的代码:

Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    myConnection.Open()
    crd.Clear()
    fn.Clear()
    ln.Clear()
    Dim str As String
    str = "SELECT * FROM tblReg WHERE (Code = '" & src.Text & "')"
    Dim cmd As OleDbCommand = New OleDbCommand(str, myConnection)
    dr = cmd.ExecuteReader
    While dr.Read()
        crd.Text = dr("crd").ToString
        fn.Text = dr("fName").ToString
        ln.Text = dr("lName").ToString
    End While
    myConnection.Close()
End Sub
错误发生在:

dr = cmd.ExecuteReader
VB说:

System.Data.dll中发生类型为“System.Data.OleDb.OLEDBEException”的未处理异常

附加信息:没有为一个或多个必需参数提供值


这是你获取代码的链接吗

请不要让代码读取输出显示的每个数据,也请检查代码的这一部分

 crd.Text = dr("crd").ToString
        fn.Text = dr("fName").ToString
        ln.Text = dr("lName").ToString
是否确定
crd、fname、lname
是表中字段的名称?请检查它,以及
代码的字段类型是什么?
是自动递增的文本还是INT?或者只是一个INT?无论是什么,都要更改代码

str=“从tblReg中选择*,其中(code=”&src.Text&“)”

str=“从tblReg WHERE code=“&src.Text”中选择*

更新


我建议更好地阅读或遵循基于链接的整个说明,在那里你得到你的代码。我建议按照链接所说的做,创建相同的,当程序运行时没有错误,然后将其与您的程序合并,因为我使用VB.NET和Access尝试了它,它工作了,我确定您没有阅读它。这样做,我相信你不仅会得到你需要的代码,你还将学习。

一个人不应该遵循教授非常糟糕代码的在线教程。非常糟糕,因为它包含并保持数据库对象处于打开状态

您应该按照以下方式重写代码:

Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    myConnection.Open()
    crd.Clear()
    fn.Clear()
    ln.Clear()

    Using cmd = New OleDbCommand("SELECT * FROM tblReg WHERE Code = ?", myConnection)
        cmd.CommandType = CommandType.Text

        With cmd.Parameters.Add(Nothing, OleDbType.VarChar, 50)
            .Direction = ParameterDirection.Input
            .Value = src.Text
        End With

        Using dr = cmd.ExecuteReader()
            While dr.Read()
                crd.Text = dr("crd").ToString
                fn.Text = dr("fName").ToString
                ln.Text = dr("lName").ToString
            End While
        End Using
    End Using

    myConnection.Close()
End Sub
您必须使用问号代替参数,因为您使用的是
OleDbCommand


将OleDbType.VarChar更改为实际的列类型。

可能的重复:@DanielShillcock OP的值周围已经有单引号。@GSerg和if
src.Text
包含撇号?;-)OP应该使用参数化查询。比撇号更糟糕的是
;升降台tblReg
@danielshillock则这将是一个无效的SQL表达式错误,除非
src.Text
,否则将不会有任何错误。他们应该使用,只是特定的问题不是相关的。是的。它们是我所在领域的名称。我检查了三遍。什么
code
?哈哈哈。>谢谢D
“从tblReg中选择*,其中code=“&src.Text
用thisOh替换您的代码。可以我还有一个问题,tblReg是我的表名。我是否要更换它?因为我需要从crd字段中获取信息。您将获取这些数据的表的名称是什么?我认为没有什么好笑的?我也和你一样,皮诺,那么你的意思是你点击一张卡片,点击卡片后,数字显示在文本框中?好的,我试试那个。非常感谢您。:>我仍然在
dr=cmd.ExecuteReader()
上收到错误,另外,当我替换
OleDbType.Varchar
时,它将不接受它。您确定错误在
cmd.ExecuteReader
上,您用什么替换了它?