我正在编写一个与listview相关联的C#网页。我的客户希望能够输入某些内容或部分内容,然后显示结果。例如,他想要一个文本框,在其中可以输入电话号码、电话号码的一部分、姓名、城市或其他任何信息,并且有一种存储过程可以查找并列出这些信息。我该如何在SQL SP或VS 2010中实现这一点?
我正在编写一个与listview相关联的C#网页。我的客户希望能够输入某些内容或部分内容,然后显示结果。例如,他想要一个文本框,在其中可以输入电话号码、电话号码的一部分、姓名、城市或其他任何信息,并且有一种存储过程可以查找并列出这些信息。我该如何在SQL SP或VS 2010中实现这一点?
SELECT cols
FROM tbl
WHERE field LIKE '%' + @input + '%'
正如其他人所建议的那样,使用LIKE运算符。
然而,不要像其他人建议的那样,直接将用户输入的数据放入您的LIKE子句中。这会导致一种非常简单且非常危险的漏洞,称为SQL注入攻击。
如果您直接插入用户的输入,则可能会使您的应用程序受到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。
SELECT * from <TABLE_NAME> WHERE Keywords like '%<search term>%'
这样你就不必像这样做 phone like <search>
或者 name like <search>
等等。
LIKE
运算符。SELECT * FROM Table WHERE PhoneNumber LIKE '%value%' OR Name LIKE '%value%' OR
City LIKE '%value%'
从这个例子中可以看出,为每个搜索条件单独设置文本框会更容易。一个用于名字,另一个用于姓氏,第三个用于公司名称。电话号码则需要单独的文本框。如果您要混合搜索客户、供应商、员工等数据,您应该让用户指示(可能是下拉列表或复选框),以便您知道查询哪些表。