2011-01-09 1 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 

Проблема, метод, кажется, вызывается только один раз. И первое изображение, которое было отображено, остается таким же даже после ввода данных, которых нет в базе данных. Я подключаю эту программу к базе данных mysql, используя odbc. Можете ли вы помочь мне определить, в чем проблема и как ее исправить?

Heres скриншот: alt text

ответ

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.

+0

спасибо, но все равно действуют одинаково. – user225269

+0

Вы прошли через это в отладчике, чтобы посмотреть, что он делает? Я предполагал, что без вызова .Read извлечение значения из объекта rdr вызывает исключение и, таким образом, пропускает нагрузку изображения. –

+0

@Mark .Read не требуется; .HasRows должно быть все это требуется. –

Смежные вопросы