搜索功能无法正常工作

本文关键字:工作 常工作 功能 搜索 | 更新日期: 2023-09-27 18:18:53

我有一个函数,调用一个名为"name"的参数,现在它工作得很好。直到我做一个搜索,其中有一个' ..所以我把它作为名字

发送
Plastic & Foam 3'X5' XLT

当我发送它返回空的网站(没有错误),但如果我发送只是Plastic & Foam它工作正常,它回来的好。在sql部分中,当我像这样通过管理工作室发送查询时我得到了这个

exec sp_productSearch 'Plastic & Foam 3''X5'' XLT'
SELECT Name FROM PProducts WHERE NAME LIKE '%Plastic & Foam 3'X5' XLT'
Msg 102, Level 15, State 1, Line 1
Incorrect syntax near 'X5'.

在c#中,我发送文本列表this

Server.HtmlEncode(txtproductname.Text.Trim().Replace("'", "''"))

你知道我可能做错了什么吗?

PS:存储过程很简单,就像这样
Select Name from PProducts Where NAME LIKE '%' + @NAME  + '%' ;   

谢谢。

搜索功能无法正常工作

您正在传递'字符"raw"到SQL中的查询?你正面临一个叫做SQL注入的问题。

请找出一个解决方案传递数据"安全"到你的SQL服务器。对于c#,你应该检查eg。

看起来你已经有了一个名为@NAME的参数

所以存储过程只需要执行

SELECT Name
FROM   PProducts
WHERE  NAME LIKE '%' + @NAME + '%' 

或者,更好的是,如果您的任何产品名称包含模式字符(如%),则返回正确的结果,根本不使用LIKE,而使用

SELECT Name
FROM   PProducts
WHERE  CHARINDEX(@NAME,NAME) > 0

或者,更好的是,使用全文搜索

我假定您正在存储过程中构建查询字符串,然后执行它。根据你到目前为止发布的内容,这是不必要的,并且存在SQL注入风险。

也不要手动转义txtproductname.Text值。

EDITED

你问题的最后一部分有点吓人

Select Name from PProducts Where NAME LIKE ''%' + @NAME  + '%'''

我想知道为什么你使用这么多引号,你可以通过字符串连接执行SQL:

EXEC 'Select Name from PProducts Where NAME LIKE ''%' + @NAME  + '%'''

如果是这种情况,一个快速/肮脏的解决方法是转义引号两次,意思是:

EXEC sp_productSearch 'Plastic & Foam 3''''X5'''' XLT'

这条语句应该没有问题运行,但这是一个非常糟糕的方式来执行SQL查询与用户输入。其他答案已经涵盖了。

在另一个注意事项,&变成&的调用Html编码根据这个页面,所以也要小心。