RowFilter包括[搜索字符串中的字符

时间:2010-04-05 18:58:01

标签: ado.net rowfilter

我填充DataSet并允许用户输入搜索字符串。我没有再次访问数据库,而是将RowFilter设置为显示所选数据。当用户输入方括号(“[”)时,我收到错误“Like Operator中的错误”。我知道在字段名称中使用时需要前缀为“\”的字符列表,但是如何防止RowFilter将“[”解释为列名的开头?

注意:我正在使用SQL Server中的数据集。

1 个答案:

答案 0 :(得分:1)

那么,您是否尝试使用LIKE子句进行过滤,您希望将“[”或“]”字符解释为要搜索的文本?

从DataColumn.Expression属性的Visual Studio帮助中:

“如果括号在子句中,则括号字符应在括号中转义(例如[[]或[]])。”

所以,你可以使用这样的代码:

        DataTable dt = new DataTable("t1");
        dt.Columns.Add("ID", typeof(int));
        dt.Columns.Add("Description", typeof(string));

        dt.Rows.Add(new object[] { 1, "pie"});
        dt.Rows.Add(new object[] { 2, "cake [mud]" });

        string part = "[mud]";
        part = part.Replace("[", "\x01");
        part = part.Replace("]", "[]]");
        part = part.Replace("\x01", "[[]");

        string filter = "Description LIKE '*" + part + "*'";

        DataView dv = new DataView(dt, filter, null, DataViewRowState.CurrentRows);

        MessageBox.Show("Num Rows selected : " + dv.Count.ToString());

请注意,使用了HACK。字符\ x01(我假设最初不会在“part”变量中)用于临时替换左括号。转义右括号后,临时“\ x01”字符将替换为左括号所需的转义序列。