我想创建一个文本框,每当文本中的内容发生变化时,内容都会被验证。如果文本框正确,则会在文本框旁边显示图像,如果图像不正确则会显示另一个图像。非常像ajax。
这是我从班级打来的方法。
Public Sub read1()
cmd.CommandText = "SELECT * FROM testdb WHERE Name='" & name & "'"
Try
rdr = cmd.ExecuteReader
Dim n As String
If rdr.HasRows Then
n = rdr("Name").ToString
Form1.PictureBox1.Image = Image.FromFile("C:\wamp\www\Dropbox\Public\Check-icon.png")
Else
Form1.PictureBox1.Image = Image.FromFile("C:\wamp\www\Dropbox\Public\Delete-icon.png")
End If
Catch ex As Exception
这里是调用方法的事件:
Private Sub TextBox1_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TextBox1.TextChanged
x.name = TextBox1.Text
x.read1()
End Sub
End Try
End Sub
问题是,该方法似乎只调用一次。并且即使在输入数据库中不存在的数据之后,显示的第一个图像也保持不变。 我正在使用odbc将此程序连接到mysql数据库。你能帮我确定一下这个问题以及如何修复它吗?
继承人截图:
答案 0 :(得分:2)
使用DataReader对象,您必须先调用Read
方法才能访问该行。我认为它需要看起来如下。我猜测VB.Net的语法和方法名称,但我有理由相信它只是rdr.Read。
If rdr.HasRows Then
rdr.Read
n = rdr("Name").ToString
编辑此外,您可能需要关闭DataReader。某些.NET数据提供程序只允许在给定连接上一次打开一个读取器,并且ODBC提供程序似乎可能就是其中之一。没有特定的关闭它的电话,你将依靠垃圾收集器来清理它:
rdr.Close
虽然这与问题没有直接关系,但您应该使用参数化查询来避免SQL injection attack。