vb.net数据阅读器使用文本更改事件

时间:2011-01-09 03:54:12

标签: mysql vb.net

我想创建一个文本框,每当文本中的内容发生变化时,内容都会被验证。如果文本框正确,则会在文本框旁边显示图像,如果图像不正确则会显示另一个图像。非常像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数据库。你能帮我确定一下这个问题以及如何修复它吗?

继承人截图: alt text

1 个答案:

答案 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