我创建了一个搜索按钮来查询我的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
我该如何解决这个问题?
答案 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