【发布时间】:2014-05-01 15:55:39
【问题描述】:
我们有一段代码尝试将模式与数据库中的数据进行匹配。
我们对我们的 SQLite 数据库使用 ServiceStack.OrmLite。
例如,给定以下记录:
ColA ColB
----- ---------
ABC ABC_Long
GHI GHI_Long
GHIP GHIP_Long
我们使用谓词:
var result = db.Select(x => x.ColA.StartsWith("GHI_"));
在我们有一个包含 SQL 特殊字符(例如 '%' 或 '_' )的搜索模式之前一切正常,例如给定搜索模式“GHI_”:
预期的行应该是:
GHI GHI_Long
然而我们得到:
GHI GHI_Long
GHIP GHIP_Long
这是由于 ORMLite 没有转义特殊字符并生成以下 SQL:
SELECT * FROM myTable WHERE UPPER(colA) LIKE 'GHI_%' OR UPPER(colB) LIKE 'GHI_%';
而不是正确转义的版本应该是:
SELECT * FROM myTable WHERE UPPER(colA) LIKE 'GHI\_%' OR UPPER(colB) LIKE 'GHI\_%' ESCAPE '\';
你能想办法解决这个问题吗?
【问题讨论】:
标签: c# sqlite servicestack ormlite-servicestack