我填充DataSet并允许用户输入搜索字符串。我没有再次访问数据库,而是将RowFilter设置为显示所选数据。当用户输入方括号(“[”)时,我收到错误“Like Operator中的错误”。我知道在字段名称中使用时需要前缀为“\”的字符列表,但是如何防止RowFilter将“[”解释为列名的开头?
注意:我正在使用SQL Server中的数据集。
答案 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”字符将替换为左括号所需的转义序列。