筛选C#ms访问列表
我的计划是,当我插入字母M时,单词开头的整个字母M将使用列表框显示,但我不能这样做。我使用了此代码,但我找不到它不起作用的原因:筛选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
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();
它工作得很好。我不知道它是否有缺陷。你能重新表述一下你的计划(你的第一行)吗,这样我们就可以很容易地读懂它(并且有一些道理)?