【问题标题】:Filtering Datatable -Missing operand after @ [closed]过滤数据表-@后缺少操作数[关闭]
【发布时间】:2018-12-20 03:46:36
【问题描述】:

我正在使用以下代码过滤数据表以显示包含我的电子邮件地址的元组。但我不断收到Missing Operand after @ 错误。

using (SqlConnection connection = new SqlConnection(conn))
{
    connection.Open();
    SqlCommand mycommand = new SqlCommand("select * from mytable",connection);
    // SqlDataReader dataReader = mycommand.ExecuteReader();
    DataTable dt = new DataTable();
    dt.Load(mycommand.ExecuteReader());
    string value = "me@live.com";
    DataView dv = new DataView(dt);
    dv.RowFilter = "email = "+value;

    dataGridView1.DataSource = dv.ToTable();
    //  dataGridView1.DataSource = dt;
}

【问题讨论】:

  • 无需使用 DataView 来处理这些问题。您可以直接将过滤器应用于 DataSource 甚至是持久 DT。 docs.microsoft.com/en-us/dotnet/api/…
  • 只需在 SqlCommand 中使用具有指定值的 where 子句 - 无需在 DataTable 填充后对其进行过滤。
  • 也可以尝试用单引号将值括起来——因为@是一个特殊字符,用来标识查询参数,应该转义为字符串。
  • @TetsuyaYamamoto 单引号解决了问题
  • 正如@Developer 在他的回答中所问的那样,您真的需要从数据库中获取 所有 行吗?如果没有,如果让数据库而不是您的应用程序进行过滤会更好。

标签: c# sql sql-server datatable dataview


【解决方案1】:

这里:

string value = "me@live.com";
DataView dv = new DataView(dt);
dv.RowFilter = "email = "+value;

你正在做的是:

DataView dv = new DataView(dt);
dv.RowFilter = "email = me@live.com";

因此,您缺少包含文字字符串的撇号。你应该改用这个:

string value = "'me@live.com'";

所以得到的过滤器是:

dv.RowFilter = "email = 'me@live.com'";

由于您可能从其他地方收到电子邮件(而不是硬编码在您的文件中),如果您使用的是 C# 6.0 或更高版本,则可以这样做:

string value = "me@live.com";
DataView dv = new DataView(dt);
dv.RowFilter = $"email = '{value}'";

【讨论】:

    【解决方案2】:

    试试这个。

    using (SqlConnection connection = new SqlConnection(conn))
    {
      connection.Open();
      var query = "select * from mytable WHERE email = 'me@live.com'";
      SqlCommand mycommand = new SqlCommand(query,connection);
      // SqlDataReader dataReader = mycommand.ExecuteReader();
      DataTable dt = new DataTable();
      dt.Load(mycommand.ExecuteReader());
      DataView dv = new DataView(dt);
    
      dataGridView1.DataSource = dv.ToTable();
      // dataGridView1.DataSource = dt;
    }
    

    【讨论】:

      【解决方案3】:

      为什么在从数据库中获取整个数据后进行过滤?只需在查询本身中过滤它:

      select * from mytable where email = 'me@live.com'

      【讨论】:

        【解决方案4】:

        试试这个,让我知道它是否有效

        using (SqlConnection connection = new SqlConnection(conn))
        {
          connection.Open();
          SqlCommand mycommand = new SqlCommand("select * from mytable",connection);
          // SqlDataReader dataReader = mycommand.ExecuteReader();
          DataTable dt = new DataTable();
          dt.Load(mycommand.ExecuteReader());
          string value = "me@live.com";
          DataView dv = new DataView(dt);
          dv.RowFilter = "email LIKE %'" + value + "'%";
        
          dataGridView1.DataSource = dv.ToTable();
          //  dataGridView1.DataSource = dt;
        }
        

        【讨论】:

        • 缺少运算符异常。
        • dv.RowFilter = String.Format("email= '{0}'", value);
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2010-11-03
        • 1970-01-01
        • 2016-09-28
        • 1970-01-01
        • 1970-01-01
        • 2014-11-10
        相关资源
        最近更新 更多