【问题标题】:Syntax error: Missing operand after 'Student' operator语法错误:“学生”运算符后缺少操作数
【发布时间】:2014-07-16 10:28:41
【问题描述】:

这是我的代码:

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...我想要它,这样我就可以通过输入他们姓名的字母来搜索人我该怎么办?

【问题讨论】:

  • @SonerGönül 这是我在文本框中输入的内容,所以是我数据库中的人名字母
  • -1,请正确理解使用 RowFilter 的确切要求。

标签: c# wpf wpfdatagrid


【解决方案1】:

你需要先用一些数据填充你的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;

【讨论】:

    【解决方案2】:

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

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

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

    【讨论】:

      【解决方案3】:

      请按以下方式更改..

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

      【讨论】:

      • 我现在收到“找不到列 [Forename]。”
      • 用于指定过滤条件。您的列必须是数据表的一部分。否则将在哪个条件下选择数据。所以建议 dt 必须包含 ForeName Column
      【解决方案4】:

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

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

      供日后参考:MSDN Documentation

      【讨论】:

      • 我现在收到“找不到列 [Forename]”。
      • @BenNixon 您需要在数据表中包含数据才能过滤行。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-10-05
      • 2013-05-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多