语法错误:'Student'运算符后缺少操作数

时间:2014-07-16 10:28:42

标签: c# wpf wpfdatagrid

这是我的代码:

private void btnSearch_Click(object sender, RoutedEventArgs e)
{

        using (SqlConnection sc = new SqlConnection(sConn))
        {
            sc.Open();


            string SearchFor = txtSearch.Text;



            using (SqlDataAdapter adapter = new SqlDataAdapter())
            {
                DataTable dt = new DataTable();
                grdData.ItemsSource = dt.DefaultView.RowFilter = string.Concat("SELECT * FROM Student WHERE Forename LIKE '%", SearchFor, "%'");
            }

当我运行代码时,我得到了:

  

“语法错误:'Student'运算符后缺少操作数。”

我正在使用WPF ...我想要它所以我只需键入一个他们名字的字母就可以搜索人物我该怎么办?

4 个答案:

答案 0 :(得分:2)

您需要先使用某些数据填充DataTable,然后才能过滤结果

using (SqlConnection sc = new SqlConnection(sConn))
{
   sc.Open();
   using (SqlDataAdapter adapter = new SqlDataAdapter())
   {
       adapter.SelectCommand = new SqlCommand("SELECT * FROM Student", sc);
       var dataset = new DataSet();
       adapter.Fill(dataset);
       var dt = dataset.Tables[0];
       var dv = dt.DefaultView;
       dv.RowFilter = String.Concat("[Forename] LIKE '%", SearchFor, "%'");
       grdData.ItemsSource = dv;
   }
}

或在没有RowFilter

的SQL中过滤
var cmd = new SqlCommand("SELECT * FROM Student WHERE Forename LIKE @forename", sc);
cmd.Parameters.AddWithValue("@forename", String.Concat("%", SearchFor, "%"));
adapter.SelectCommand = cmd;

答案 1 :(得分:1)

在您的过滤器中,您只需指定WHERE clause,它不是所需的完整SQL SELECT语句。所以看起来应该是这样的:

grdData.ItemsSource = dt.DefaultView.RowFilter = string.Concat("Forename LIKE '%", SearchFor, "%'");

请注意,用户可以输入一些字符,例如%'等。

答案 2 :(得分:0)

请更改如下..

dt.DefaultView.RowFilter ="Forename LIKE '%" + SearchFor + "%'"

答案 3 :(得分:0)

“RowFilter”查询不是完整的SQL查询,而是SQL查询的子集。 在你的情况下,你想要像:

grdData.ItemsSource = dt.DefaultView.RowFilter = String.Format("[Forename] LIKE '%{0}%'", SearchFor);

供将来参考:MSDN Documentation