搜索按钮出错

时间:2016-12-07 08:46:10

标签: vb.net 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 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.OleDbException”类型异常

     

附加信息:没有给出一个或多个必需参数的值。

2 个答案:

答案 0 :(得分:0)

不应该遵循教授非常糟糕代码的在线教程。 That code非常糟糕,因为它包含SQL injection并且打开了数据库对象。

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

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 does not support named parameters

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

答案 1 :(得分:-1)

这是您获取代码的链接吗?

http://www.visual-basic-tutorials.com/ReadFromAccess.htm

请不要在输出显示的每个数据上读取代码,并检查代码的这一部分。

 crd.Text = dr("crd").ToString
        fn.Text = dr("fName").ToString
        ln.Text = dr("lName").ToString

您确定crd,fname,lname是表格中字段的名称吗?请检查它以及code?的字段类型是文本还是INT是自动增量?还是只是一个INT?无论它改变你的代码是什么。

str = "SELECT * FROM tblReg WHERE (Code = '" & src.Text & "')"

str = "SELECT * FROM tblReg WHERE Code =" & src.Text

更新

我建议您根据获取代码的链接更好地阅读或遵循整个说明。我建议做同样的链接说创建相同,当程序运行没有错误然后将其与您的程序合并,因为我尝试使用VB.NET和Access,它工作,我确定你不读它。这样做,我相信你不会只获得你需要的代码,你也将学习。