2011-01-09 3 views
1

내용이 텍스트가 변경 될 때마다 유효성이 검사되는 텍스트 상자를 만들고 싶습니다. 텍스트 상자가 올바른 경우 이미지가 텍스트 상자 옆에 표시되고 이미지가 올바르지 않으면 다른 이미지가 표시됩니다. 아약스처럼.텍스트 변경 이벤트를 사용하는 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 데이터 공급자는 주어진 연결에서 한 번에 하나의 판독기 만 열 수있게하며 ODBC 공급자가 그 중 하나 일 가능성이 높습니다.

rdr.Close 

을 그리고이 직접 질문과 아무 상관이있는 동안, 당신은 아마를 방지하기 위해 매개 변수가있는 쿼리를 사용해야합니다 : 특정 통화를 종료하지 않고, 당신은 가비지 컬렉터에 의존 될 것은 그것을 청소하기 SQL injection attack.

+0

감사하지만 여전히 같은 방식으로 작동합니다. – user225269

+0

디버거에서 어떤 작업을 수행 했습니까? .Read 호출 없이는 rdr 개체에서 값을 검색하면 예외가 발생하여 이미지로드가 건너 뛴다 고 가정합니다. –

+0

@Mark.Read는 필요하지 않습니다. .HasRows가이 모든 것이 필요합니다. –