2011-01-09 7 views
1

テキストボックスを作成して、テキストボックス内のテキストが変更されるたびに検証されます。また、テキストボックスが正しい場合はテキストボックスの横に画像が表示され、正しくない場合は別の画像が表示されます。 Ajaxにかなり似ています。テキスト変更イベントを使用するvb.netデータリーダー

Heresはクラスから呼び出したメソッドです。

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データベースに接続しています。あなたは何が問題であり、それを修正する方法を決定するのを助けることができますか?

HERESにスクリーンショット:DataReaderオブジェクトで alt text

答えて

2

、あなたが行にアクセスする前にReadメソッドを呼び出す必要があります。私は以下のように見える必要があると思う。私はVB.Netの構文とメソッドの名前で推測していますが、私は合理的にそれが単にrdr.Readになると確信しています。

If rdr.HasRows Then 
     rdr.Read 
     n = rdr("Name").ToString 

編集また、あなたはおそらく、DataReaderを閉じる必要があります。一部の.NETデータプロバイダでは、特定の接続で一度に1つのリーダーしか開くことができないため、ODBCプロバイダがその1つであるようです。それを閉じるために、特定のコールがなければ、あなたはそれをクリーンアップするためにガベージコレクタに頼ることになります。

rdr.Close 

そして、これが直接質問とは何の関係もありませんが、あなたはおそらく、ANを避けるために、パラメータ化クエリを使用する必要がありますSQL injection attack

+0

同じように行動してくれてありがとうございます。 – user225269

+0

デバッガで何をやっているのですか?私は、.Read呼び出しがなければ、rdrオブジェクトからの値の取得が例外を引き起こしていて、画像の読み込みをスキップしていると想定していました。 –

+0

@マーク。読み込みは必須ではありません。 .HasRowsはこれがすべて必要なはずです。 –

関連する問題