使用DataTable执行LIKE查询时出现异常

3

我的输入是 '[CL',我缺少闭合括号。而列中包含 '[CL]'。我正在使用类似查询在列'MYStps'中查找。但是我得到了一个异常。下面附上图片。

{
    DataRow[] searchResult = MyDataTable.Select("MYStps Like '%" + txtSearchLog_Level.Text.Trim() + "%'");
}

Exception


你需要提供更详细的代码。例如,txtSearchLog_Level是什么?显然,你正在输出“[CL”。 - ohlmar
@ohlmar OP说文本框中有[CL - Sergey Berezovskiy
1
LINQ解决方案怎么样?var searchResult = MyDataTable.AsEnumerable().Where(r => r.Field<string>("MYStps").Contains(txtSearchLog_Level.Text.Trim())).ToArray() - Sergey Berezovskiy
问题出在'['字符上。当您尝试使用'['字符过滤记录时,Visual Studio会抛出异常“Like运算符中的错误。请改用[[]而不是[。http://social.msdn.microsoft.com/Forums/vstudio/en-US/ac6a68c0-c254-4e73-8b72-7886f92c06d8/special-charecters-in-the-filter-expression-for-datatableselectfilterexpression?forum=csharpgeneral - Shell
1个回答

1
因为您的文本包含[,它是一个通配符字符
来自LIKE (Transact-SQL)中的“将通配符字符用作文字”的部分

您可以使用通配符模式匹配字符作为文字字符。 要将通配符字符用作文字字符,请将通配符字符括在方括号中。

例如;
Symbol       -- Meaning
LIKE '[[]'   -- [

在您的情况下,您的文本应该是[[]CL,因此,您可以将其用作字符串文字。
一种解决方案是在使用DataTable.Select方法之前,将[替换为[[]
string s = txtSearchLog_Level.Text.Trim().Replace("[", "[[]");
DataRow[] searchResult = MyDataTable.Select("MYStps Like '%" + s + "%'");

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接