2014-02-22 2 views
0

У меня есть база данных, как это:Запись не фильтруется должным образом в моем DataGridView.

enter image description here

И когда я искать название компании в текстовом поле с "Jaya Raya Motor" ключевым словом, результат таков:

enter image description here

Но когда я ищу название компании в текстовом поле с «Jaya» ключевое слово, результат ничего не показал.

Я смущен, как это возможно? Потому что первое ключевое слово «Jaya», а полное ключевое слово «Jaya Raya Motor», это должно показать мне результат, но теперь это не так.

Как исправить это?

Вот код:

private void GetData(object sender, EventArgs e) 
     { 
      if (_choice.comboBox1.Text == "English") 
      { 
       if (string.IsNullOrWhiteSpace(textBox1.Text)) 
       { 
        System.Media.SoundPlayer _sound = new System.Media.SoundPlayer(@"C:\Windows\Media\Windows Exclamation.wav"); 
        _sound.Play(); 
        MessageBox.Show("Please enter a character or more!", "Error"); 
       } 

       else 
       { 
        using (OleDbConnection conn = new OleDbConnection(connectionString)) 
        { 
         string query = "SELECT [ProductCode], [Quantity], [Description], [SubTotal], [Total], [IssuedBy], [To], [Times] FROM [TransRecord] WHERE [To] = @To ORDER BY [To]"; 

         conn.Open(); 

         using (OleDbCommand cmd = new OleDbCommand(query, conn)) 
         { 
          cmd.Parameters.Add("@To", System.Data.OleDb.OleDbType.VarChar); 
          cmd.Parameters["@To"].Value = this.textBox1.Text; 

          using (OleDbDataAdapter _adapter = new OleDbDataAdapter(cmd)) 
          { 
           _ds.Clear(); 
           _adapter.Fill(_ds, "TransRecord"); 
           dataGridView1.DataSource = null; 
           dataGridView1.Refresh(); 
          } 

          dataGridView1.DataSource = _ds.Tables[0]; 
          dataGridView1.ClearSelection(); 

          conn.Close(); 
         } 
        } 
       } 
      } 
     } 

Любая помощь? Спасибо!

Ваш ответ будет очень признателен!

ответ

1

Проблема: Вы используете WHERE положение с равным = оператора для сравнения с названием компании. , если вы используете WHERE с равным оператором, он возвращает только точные совпадающие записи.

Вы должны использовать оператор LIKE с символами дикой карты вместо равного оператора для поиска.

Попробуйте это:

string query = "SELECT [ProductCode], [Quantity], [Description], [SubTotal], [Total], [IssuedBy], [To], [Times] FROM [TransRecord] WHERE [To] LIKE @To ORDER BY [To]"; 
cmd.Parameters["@To"].Value = "%"+this.textBox1.Text+"%"; 
+0

я попробовал ваш код, сэр, но, к сожалению, я получаю сообщение об ошибке, и ошибка говорит, ' синтаксическая ошибка в FROM FROM' – Kaoru

+0

@Kaoru: проверить отредактированный ответ –

+0

@Suduhakar Tillapudi: Большое спасибо, сэр! Это сработало! – Kaoru

2

Вы просто ищете точное совпадение. Возможно, вам понадобится использовать SubString или Like.

Замените WHERE [To] = @To на ваш запрос следующим.

WHERE [To] LIKE LIKE % @To % 

Check this for more info

1

Вы используете оператор равенства:

WHERE [To] = @To

Таким образом, строка "Джая" никогда не будет возвращать результаты для записей со значением «Jaya Raya Motor ". В этом случае вы ищете записи, которые начинаются с «Jaya». Поддержка SQL как запросы: http://www.w3schools.com/sql/sql_like.asp. Это замедлит ваш запрос и в зависимости от механизма БД может или не может использовать индексы, которые вы определили для этого поля. Но это принесет результаты, которые вы ожидаете.Вы ищете это:

WHERE [TO] like 'JAYA%' 

который будет возвращать все записи, TO начинается с «Джая»

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