查询文本包含的数据表

时间:2014-12-18 18:10:08

标签: c# .net datatable oledb

基于这个问题:how to run query on dataset?

我正在尝试从我的数据集中查询数据表,其中文本包含字符串,类似于String.Contains方法或sql LIKE运算符。

这是我到目前为止所尝试的内容:

    private void textBox1_TextChanged(object sender, EventArgs e)
    {
        DataTable tbl = globals.UserDataSet.Tables[0];
        DataRow[] tempDataRows = tbl.Select("USER_ID Like " + textBox1.Text + " OR THE_NAME Like " + textBox1.Text);
    }

这会产生System.Data.SyntaxError错误。

是否可以在数据表中查询包含子字符串的文本?有没有更好的方法呢?

3 个答案:

答案 0 :(得分:6)

一些事情:

  • 首先,您需要将您的值括在单引号中。 (即链接的question
  • 其次,如果您要对Contains进行比较,那么您的值应该为% (就像SQL一样)

所以你的陈述应该是:

DataRow[] tempDataRows = tbl.Select("USER_ID Like '%" + textBox1.Text + "%' OR THE_NAME Like '%" + textBox1.Text +"%');

您还可以使用LINQ to DataSet/DataTable过滤结果,例如:

var query = tbl.AsEnumerable()
    .Where(r => r.Field<string>("USER_ID").Contains(textBox1.Text) &&
                r.Field<string>("THE_NAME").Contains(textBox1.Text));

答案 1 :(得分:5)

您需要在字符串周围添加单引号:

DataRow[] tempDataRows = tbl.Select("USER_ID Like '" + textBox1.Text + "' OR THE_NAME Like '" + textBox1.Text + "'");

答案 2 :(得分:1)

您需要单引号和%围绕字符串值。它抛出了语法错误,因为构造的查询具有来自输入的原始字符串,如“WHERE THE_NAME Like John”。试试这个:

tbl.Select("USER_ID Like '%" + textBox1.Text + "%' OR THE_NAME Like '%" + textBox1.Text + "%'");