过滤数据表 - @ 后缺少操作数

Filtering Datatable -Missing operand after @

我正在使用以下代码过滤数据表以显示包含我的电子邮件的元组 address.But 我不断收到 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;
}

试试这个。

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;
}

试试这个,如果有效请告诉我

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;
}

这里:

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}'";

为什么要在从数据库中获取全部数据后进行过滤?只需在查询本身中对其进行过滤即可:

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