Я недавно использовал полнотекстовый поиск, поэтому постараюсь ответить на некоторые ваши вопросы.
• «Я ненавижу строить 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 кажется более легким решением, но не тем, которое нужно выбирать, когда вам нужны более глубокие настройки.