在c#中按名称搜索

时间:2013-11-18 16:33:19

标签: c# wpf datagrid ms-access-2007

我有Follwing代码。要按StdName搜索,但是当我运行此代码时,它会在datagrid视图中显示空单元格。帮我纠正一下。

 private void btnSBN_Click(object sender, EventArgs e)
    {
        String query = "Select * from Student where StdName like '*@Name*'";

        OleDbCommand cmd = new OleDbCommand(query, cn);
        cmd.Parameters.Add("@Name", OleDbType.VarChar, 20);
        cmd.Parameters["@Name"].Value = txtName.Text;
        OleDbDataAdapter da = new OleDbDataAdapter();
        da.SelectCommand = cmd;

        try
        {
            DataSet ds = new DataSet();
            da.Fill(ds,"SBN");
            dgStudent.DataSource = ds;
            dgStudent.DataMember = "SBN";
            dgStudent.Refresh();
        }
        catch (OleDbException ex)
        {
            MessageBox.Show(ex.Message);
        }


    }

编译器没有显示语法错误,也没有异常。但在数据网格视图中显示空单元格。

2 个答案:

答案 0 :(得分:2)

'*@Name*'

是你的问题。

如果您正在寻找完全匹配,请不要使用'*'。

如果您正在寻找在StdName中某处找到@Name的实例,请使用:

'%' + @Name + '%'.

你也不应该在引号内包含@Name。如果它完全匹配:

StdName = @Name

答案 1 :(得分:0)

使用参数查询时,请记住在CommandText中永远不应该有分隔符。如果后台需要分隔符,OleDbCommand对象将为您处理它们。

String query = "Select * from Student where StdName like @Name";
OleDbCommand cmd = new OleDbCommand(query, cn);
cmd.Parameters.Add("@Name", OleDbType.VarChar, 20);
cmd.Parameters["@Name"].Value = "%" + txtName.Text + "%";