C# · 12月 27, 2021

c# – 关于SQL Server 2008全文搜索

我已经建立了一个这样的T-SQL查询: DECLARE @search nvarchar(1000) = ‘FORMSOF(INFLECTIONAL,hills) AND FORMSOF(INFLECTIONAL,print) AND FORMSOF(INFLECTIONAL,emergency)’SELECT * FROM TicketsWHERE ID IN ( — unioned subqueries using CONTAINSTABLE … )

此搜索的GUI将是一个aspx页面,其中包含用户可以搜索的单个文本框.

我打算以某种方式构建搜索词,就像上面的例子(@search).

但我有一些担忧:

>示例搜索项是否在搜索中包含所有单词的最佳或唯一方法?
>我应该分开单词并在C#或T-sql中构造搜索项.我倾向于倾向于C#进行决策/循环/构建,但是我想要你的意见.
>我讨厌建立sql,因为注入的风险.我该怎么防范这个?
>我应该用FREETEXTTABLE吗?有没有办法使FREETEXT寻找所有的单词而不是任何的?
一般来说,你还会怎么做?

@H_502_17@解决方法 我最近使用全文搜索,所以我会尝试回答你的一些问题.

•“我讨厌由于注入风险而动态构建sql,我该如何防范?

我使用像这样的消毒方法:

static string SanitizeInput(string searchPhrase) { if (searchPhrase.Length > 200) searchPhrase = searchPhrase.Substring(0,200); searchPhrase = searchPhrase.Replace(“;”,” “); searchPhrase = searchPhrase.Replace(“‘”,” “); searchPhrase = searchPhrase.Replace(“–“,” “); searchPhrase = searchPhrase.Replace(“/*”,” “); searchPhrase = searchPhrase.Replace(“*/”,” “); searchPhrase = searchPhrase.Replace(“xp_”,” “); return searchPhrase; }

•我应该使用FREETEXTTABLE吗?有没有办法使FREETEXT寻找所有的单词而不是任何的?

我使用FREETEXTTABLE,但我需要任何一个字.就像我已经读过的一样(我已经读了很多),你必须使用CONTAINSTABLE来搜索所有的单词或不同的组合. FREETEXTTABLE似乎是更轻的解决方案,但是当您想要更深入的自定义时,它不是选择的.