筛选C#ms访问列表

筛选C#ms访问列表,c#,filtering,C#,Filtering,我的计划是,当我插入字母M时,单词开头的整个字母M将使用列表框显示,但我不能这样做。我使用了此代码,但我找不到它不起作用的原因: conn.Open(); OleDbCommand cmd2 = new OleDbCommand("SELECT fnID, Lastname, Firstname, Middlename FROM tbl_Fullname WHERE Firstname LIKE '%?'", conn); cmd2.Parameters.Add("@Firstname", Ol

我的计划是,当我插入字母M时,单词开头的整个字母M将使用列表框显示,但我不能这样做。我使用了此代码,但我找不到它不起作用的原因:

conn.Open();
OleDbCommand cmd2 = new OleDbCommand("SELECT fnID, Lastname, Firstname, Middlename FROM tbl_Fullname WHERE Firstname LIKE '%?'", conn);
cmd2.Parameters.Add("@Firstname", OleDbType.VarChar).Value = textBox3.Text;
try
{
  OleDbDataReader dr = cmd2.ExecuteReader();
  if (dr.Read())
  {
    textBox1.Text = dr[0].ToString();   //fnID
    listBox1.Items.Add(dr[1].ToString()); //Lastname 
    textBox3.Text = dr[2].ToString();   //Firstname
    textBox4.Text = dr[3].ToString();   //Middlename
  }
  else
  {
    textBox1.Text = "";
    textBox2.Text = "";
    textBox3.Text = "";
    textBox4.Text = "";
    //MessageBox.Show("No result");
  }
}
catch (Exception ex)
{
  MessageBox.Show(ex.Message);
}
conn.Close();
您的查询是错误的:

LIKE '%?'
首先%是通配符,所以它需要在参数后面

其次,我不确定这是否会起作用——事实上,我相当肯定它不会起作用,也就是说,您不能将参数放入带引号的字符串中——因此我认为您希望在查询中使用以下内容

LIKE ?
参数设置如下所示:

.Value = textBox3.Text + "%"

这是我的新筛选代码:

conn.Open();
            OleDbCommand cmd2 = new OleDbCommand("SELECT fnID,Lastname,Firstname,Middlename FROM tbl_Fullname WHERE Firstname LIKE '" + textBox3.Text + "%'", conn);

            try
            {
                OleDbDataReader dr = cmd2.ExecuteReader();

                while (dr.Read())
                {
                    textBox1.Text = dr[0].ToString();   //fnID
                    textBox2.Text = dr[1].ToString();
                    listBox1.Items.Add(dr[1].ToString()); //Lastname
                    textBox3.Text = dr[2].ToString();   //Firstname
                    textBox4.Text = dr[3].ToString();   //Middlename
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
            }
            conn.Close();

它工作得很好。我不知道它是否有缺陷。

你能重新表述一下你的计划(你的第一行)吗,这样我们就可以很容易地读懂它(并且有一些道理)?