搜索按钮无响应

时间:2017-07-25 14:41:49

标签: vb.net ms-access

我创建了一个搜索按钮来查询我的MS Access数据库并显示结果,但每当我输入ID并单击搜索按钮时它什么都不做。

其他一切正常,它从VB表单中复制数据并将其存储在MS Access数据库中,但搜索按钮不会查询数据库并检索数据。

以下是我的搜索按钮代码:

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnSearch.Click
    Dim found As Boolean

    Try
        cm = New OleDb.OleDbCommand
        With cm
            .Connection = cn
            .CommandType = CommandType.Text
            .CommandText = "SELECT* FROM tblInfo WHERE (ID = @ID & txtFind.Text = @ID)"
            dr = .ExecuteReader
        End With
        While dr.Read()
            found = True
            txtFirst1.Text = dr("Pfirst").ToString
            txtMid1.Text = dr("Pmiddle").ToString
            txtLast1.Text = dr("Plast").ToString
            txtAdd1.Text = dr("Paddress").ToString
            txtPhone1.Text = dr("Pphone").ToString
            txtContact1.Text = dr("Pcontact").ToString

        End While
        cn.Close()
        Exit Sub
        If found = False Then MsgBox("Patient ID not found!", MsgBoxStyle.Critical)
        dr.Close()

    Catch ex As Exception

    End Try

我该如何解决这个问题?

1 个答案:

答案 0 :(得分:0)

问题是尝试将txtFind.Text的值传递给命令。

您想使用parameters

With cm
    .Connection = cn
    .CommandType = CommandType.Text
    .CommandText = "SELECT * FROM tblInfo WHERE ID = ?"
    .Parameters.Add("@ID", OleDbType.[Type]).Value = txtFind.Text
    dr = .ExecuteReader
End With
  

请注意,我使用了OleDbType.[Type]。您需要将此替换为您为列ID指定的数据类型。

在调用ExecuteReader()之前,您似乎错过了打开连接:

cn.Open()

我会考虑实施Using

  

有时,您的代码需要非托管资源,例如文件句柄,COM包装器或SQL连接。使用块可确保在代码完成后处理一个或多个此类资源。这使得它们可供其他代码使用。

以下是一些示例代码:

Using con As New OleDbConnection(connectionString),
      cmd As New OleDbCommand("SELECT * FROM tblInfo WHERE ID = ?", con)

    con.Open()

    cmd.Parameters.Add("@ID", OleDbType.[Type]).Value = txtFind.Text
    dr = cmd.ExecuteReader()

    ...

End Using