我正在编写一个与列表视图绑定的C#网页。我的客户希望能够输入可显示结果的某些内容或部分内容。例如,他想要一个文本框,他可以在其中输入电话号码,电话号码的一部分,姓名,城市或其他任何东西,然后会找到一种SP,然后列出信息。如何在SQL Sp或VS 2010中完成此操作?
答案 0 :(得分:7)
SELECT cols
FROM tbl
WHERE field LIKE '%' + @input + '%'
答案 1 :(得分:3)
正如其他几个人所建议的那样,使用LIKE运算符。
但是,不要像其他人建议的那样直接将用户输入的数据放入LIKE子句中。这导致了一个非常简单且非常危险的漏洞,称为SQL注入攻击。
如果您将用户的输入直接插入
SELECT cols FROM tbl WHERE field LIKE '%' + input + '%'
然后用户可以将以下内容放在文本框中:
; DROP TABLE tbl; -
(作为示例),它使您的SQL语句变为:
SELECT cols FROM tbl WHERE field LIKE '%'; (the first part of your query)
DROP TABLE tbl; (the injected sql that you don't want to let people run; drop the database table)
-- '%' (the rest of your previous query is commented out)
始终确保使用参数化SQL语句,或者至少清理输入。您真的不希望人们能够在您的数据库服务器上运行任意SQL。
答案 2 :(得分:1)
大多数人都遇到了解决方案的一部分 - 使用LIKE运算符。
但我认为问题的另一个方面可以在SQL中解决。
创建计算的varchar(MAX)列。在此字段上启用全文索引。然后你需要做的就是做一个像:
这样的SQLSELECT * from <TABLE_NAME> WHERE Keywords like '%<search term>%'
这样您就不必执行phone like <search>
或name like <search>
等。
答案 3 :(得分:0)
使用LIKE
运算符。
SELECT * FROM Table WHERE PhoneNumber LIKE '%value%' OR Name LIKE '%value%' OR
City LIKE '%value%'
答案 4 :(得分:0)
如果您想使用一个文本框,其中可能包含许多不同类型的数据,您需要在代码中具体说明要搜索的数据库表和列,以及顺序。< / p>
例如,您可以编写执行此操作的查询:
从中可以看出,为每个搜索条件设置单独的文本框会更容易。一个文字框用于名字,另一个用于姓氏,第三个用于公司名称。电话号码的单独文本框。如果您要为客户,供应商,员工等混合数据,您应该让用户指示(可能在下拉列表或复选框上)要搜索哪些类型的人,以便您知道要查询的表。