2016-03-18 2 views
0

Если в таблице существует номер ваучера, который я набрал, он должен отображать детали в соответствующих текстовых окнах, но если он не существует, то окно с сообщением (ID не существует!) Будет показать.Значения базы данных в текстовом поле

Например, номер ваучера 101 существует в таблице, Во-первых, я хотел бы ввести «1» в текстовом поле, то MessageBox сразу появится ... Во-вторых, я бы по-прежнему число после нажатия кнопки ОК он теперь будет быть номером «10» снова появится сообщение, в котором говорится (идентификатор не существует!). Тогда, наконец, я смогу набрать «101», подробности уже будут показаны в соответствующих текстовых окнах.

Моя проблема в том, что каждый раз, когда я набирал один номер, появляется сообщение, в котором говорится (идентификатор не существует!). Как я могу это решить?

TextChanged свойство "textBox22" Код:

private void textBox22_TextChanged(object sender, EventArgs e) 
    { 
     String path = "Data Source=LOCALHOST; Initial Catalog= sadd; username=root; password=''"; 
     MySqlConnection sqlconn = new MySqlConnection(path); //communicator //constructors 
     MySqlCommand sqlcomm = new MySqlCommand(); 
     MySqlDataReader sqldr; 
     sqlconn.Open(); 
     sqlcomm.Connection = sqlconn; 
     sqlcomm.CommandType = CommandType.Text; 
     sqlcomm.CommandText = "Select * from approvedrecords where VoucherNumber=" + textBox22.Text + ""; 

     sqldr = sqlcomm.ExecuteReader(); 
     sqldr.Read(); 

     if (sqldr.HasRows) 
     { 
      textBox26.Text = sqldr[0].ToString(); 

     } 
     sqlconn.Close(); 


     if (textBox22.Text == textBox26.Text) 
     { 

      String path8 = "Data Source=LOCALHOST; Initial Catalog= sadd; username=root; password=''"; 
      MySqlConnection sqlcon = new MySqlConnection(path8); //communicator //constructors 

      string query = "select * from approvedrecords where VoucherNumber = " + textBox22.Text + " "; 
      MySqlCommand cmd = new MySqlCommand(query, sqlcon); 
      MySqlDataReader dbr; 


      sqlcon.Open(); 
      dbr = cmd.ExecuteReader(); 
      while (dbr.Read()) 
      { 

       string a = (string)dbr["CheckNumber"].ToString(); 
       string b = (string)dbr["DateCreated"]; 
       string c = (string)dbr["Status"]; 
       string d = (string)dbr["PayeesName"]; 
       string f = (string)dbr["Amount"].ToString(); 
       string g = (string)dbr["DatePrinted"]; 
       string h = (string)dbr["Particulars"]; 
       string i = (string)dbr["Prepared_by"]; 
       string j = (string)dbr["Payment_received_by"]; 

       textBox21.Text = a; 
       textBox23.Text = b; 
       textBox28.Text = c; 
       textBox20.Text = d; 
       textBox19.Text = f; 
       textBox27.Text = g; 
       textBox18.Text = h; 
       textBox16.Text = i; 
       textBox17.Text = j; 

      } 
     } 
     else 
     { 
      MessageBox.Show("ID doesn't exist!"); 
     } 
+0

не было бы лучше, чтобы подключиться к базе данных один раз и хранить все данные в одном классе. вы сравниваете первую запись только в базе данных. вам нужно зациклить его с выходом, если он найдет совпадение. Я не работаю с sql, но это не кажется правильным, если (sqldr.HasRows) { textBox26.Text = sqldr [0] .ToString(); } – Claudius

+0

Вы действительно должны привыкнуть давать разумные имена своим полям/свойствам/элементам управления. Также вы должны использовать paramaterised sql-запросы так же, как и сейчас, открываете для SQL-инъекции. –

ответ

0

Почему бы вам не попробовать с помощью события OnLostFocus текстового поля? Как объяснено here. Таким образом, ваш код будет вызываться только тогда, когда пользователь откажется от вашего текстового поля.

В качестве альтернативы, если вы хотите сохранить свой OnTextChanged обработчика, я бы рекомендовал использовать асинхров вызывает мое добавление UpdatePanel как объяснено here. Вам нужно будет добавить метку, отображающую статус запроса, каждый раз, когда пользователь вводит символ, поэтому, когда данные не будут возвращены вашим запросом, метка будет показывать «Нет результатов для этого идентификатора», и никакие текстовые поля не будут заполнены , Когда результаты будут найдены, метка будет читать «Данные были найдены для этого идентификатора», и вы должны заполнить элементы управления соответствующим образом.

Я надеюсь, что это помогает, и я надеюсь, что было ясно :-)

+0

Это не ответ, это должен быть комментарий. он хочет немедленную информацию, которая не произойдет, если пользователь не щелкнет где-то еще в форме – Claudius

+0

@Claudius. Вы правы, я обновил свой комментарий, чтобы быть более похожим на ответ. –

+0

благодарит за информацию! –