问候,
我有两个关于DataTable.Select()的问题:
1)如何逃避可能导致问题的潜在撇号或任何其他角色。我并不担心SQL注入。 2)如何在Like中使用IN,并包含具有null的结果。
1)不幸的是,我似乎找不到第一个选项的任何建议,因为每个人都说使用参数化(是一个单词)查询,我很确定你不能用Datatable.select。情况是这样的,我不知道从文本框中检索列表后,值会提前是什么。 ('US','Engineering','Lumburg's')我知道我可以在将字符串传递给select之前对其进行解析,但我确信有一些ANSI已经内置了,我担心我不会知道。我知道如果我知道将要找到它的位置,连续的两个撇号会逃脱该角色,但是当我收到它时我不知道确切的位置。
2)好的。现在为实际的Select Expression。我想要做的是允许用户将表单类型释放到文本字段中。此文本字段将使用4个不同的列进行筛选。因此,用户可以键入由空格分隔的多个项目,然后根据其标准执行查询。 (如iTunes搜索框允许您输入自由形式的专辑歌曲等,或者您可以是特定的,只能搜索一种类型的项目)
我知道怎么做自己的IN或者喜欢但是我不知道如何将它们组合在一起(包括转义撇号并包括匹配但在其中一列中可能有空的结果)和当然做一些.Select方法支持的东西。
地点(国家IN('美国','工程','Lumburg')) WHERE(国家喜欢'LU%')
因此上述案例中的用户提供了LU,该LU应返回Lumburg的记录。他们提供的信息越多,将进一步完善结果。有什么想法吗?
以下是有关我的申请的技术规格:
的Winforms VB.NET .Net 2.0
答案 0 :(得分:2)
您最终会得到一个类似于以下内容的查询:
国家/地区='美国'或国家/地区='工程'或国家='Lumburg'的'或国家/地区'LU%'
terms = //split apart their search entry
foreach (string searchTerm in terms)
{
// I don't know how you're telling the difference between terms you want an exact
// match for, and which use like, but do something like this
if (exactMatchNeeded)
{
query += " OR Country = '" + searchTerm.Replace("'", "''") + "' ";
}
else
{
query += " OR Country LIKE '" + searchTerm.Replace("'", "''") + "' ";
}
}
当然,你需要整理一下,以确保在开始时防止额外的“OR”等事情,但这应该让你开始。