Как использовать оператор Like в c # с использованием базы данных ms access?

#c#

#c#

Вопрос:

Я создаю приложение Windows Form для нашего проекта мой проект посвящен системе планирования, и я пытаюсь выполнить поиск данных из моей базы данных ms access, которая содержит Day и Instructor. Столбец Day имеет только два значения «MWF и TTH». И когда я ищу MWF, я хочу, чтобы все данные, содержащие MWF, отображались в моем listview, но будут отображаться только одни данные. Как я могу это исправить?

КОД ЗДЕСЬ

 public void Search()
    {
        c.OpenDb();
        c.com.CommandType = CommandType.Text;
        c.com.CommandText = "SELECT * FROM ScheduleInfo WHERE Day LIKE '%"   comboBox1.Text   "%' AND Instructor LIKE '%"   textBox9.Text   "%' ";
        c.com.Connection = c.con;
        c.dr = c.com.ExecuteReader();
        if (c.dr.Read())
        {
            ListViewItem fp = new ListViewItem(c.dr["Day"].ToString());
            fp.SubItems.Add(c.dr["Time"].ToString());
            fp.SubItems.Add(c.dr["Instructor"].ToString());
            fp.SubItems.Add(c.dr["Subject"].ToString());
            fp.SubItems.Add(c.dr["Room"].ToString());
            listView5.Items.Add(fp);

        }
        else
        {
            Notfound nf = new Notfound();
            nf.ShowDialog();
            if (nf.DialogResult == DialogResult.OK)
            {
                textBox9.Clear();
            }
        }
        c.CloseDb();
    }

    private void button13_Click(object sender, EventArgs e)
    {
        Search();
    }
  

Комментарии:

1. Не забывайте о маленьких таблицах Bobby. bobby-tables.com

2. Вы пробовали while (c.dr.read()) или что-то подобное, чтобы выполнить цикл?

3. Доступ. Дрожь.

4. Вы уверены, что Access использует % в качестве подстановочного знака, а не * ? Кажется, я что-то помню из давних времен…

Ответ №1:

Изменить if (c.dr.Read()) на while (c.dr.Read()) :

     bool hasRecords = false;

    while (c.dr.Read()) {
      ListViewItem fp = new ListViewItem(c.dr["Day"].ToString());

      fp.SubItems.Add(c.dr["Time"].ToString());
      fp.SubItems.Add(c.dr["Instructor"].ToString());
      fp.SubItems.Add(c.dr["Subject"].ToString());
      fp.SubItems.Add(c.dr["Room"].ToString());
      listView5.Items.Add(fp);

      hasRecords = true;
   }

   if (!hasRecords) {
     Notfound nf = new Notfound();

     nf.ShowDialog();

     if (nf.DialogResult == DialogResult.OK)
        textBox9.Clear();
   }
  

Ответ №2:

Access использует символ * в качестве подстановочного знака, а не символ%.

http://www.techrepublic.com/article/10-tips-for-using-wildcard-characters-in-microsoft-access-criteria-expressions/

SQL Server использует символ% в качестве подстановочного знака. Возможно, это то, о чем вы думали.