我有这个问题(本身并不重要):
SqlCommand sqlCmd = new SqlCommand("SELECT * FROM Table1 WHERE " +
"CONTAINS((col1, col2, col3), " + "'\"*m*\"' )" +
"ORDER BY(SELECT null) " +
"OFFSET(1) ROWS FETCH NEXT(100) ROWS ONLY", conn);
它将返回指定列中具有“m”的所有行。 请注意,'m'位于一对星号(百搭字符)内,然后是引号,然后是撇号。
我想对它进行参数化,即在查询中放入任何字符串。
我写了这个:
SqlCommand sqlCmd = new SqlCommand("SELECT * FROM Table1 WHERE "+ "CONTAINS((col1, col2, col3), " + "'\"*@searchText*\"' )" +
"ORDER BY(SELECT null) "+
"OFFSET(1) ROWS FETCH NEXT(100) ROWS ONLY", conn);
sqlCmd.Parameters.AddWithValue("@searchText", textToSearch);
但是,不是将textToSearch
字符串的内容放在SqlCommand
中,而是将此代码放入@searchText
本身。
我在这里看了类似的帖子并试图效仿,但它没有用,可能是因为格式中有一个撇号和一个引号和一个星号。
我做错了什么?
我应该如何指定此命令?
答案 0 :(得分:2)
您需要将参数连接到查询中的搜索字符串中......如下所示:
jmp
答案 1 :(得分:2)
您将参数括在单引号内,这些引号是为字符串保留的。
删除参数周围的单引号,你应该这样:
此致:
+ "'\"@searchText\"' )" +
正确:
+ " @searchText)" +
修改强>:
如果要在搜索内容中包含双引号和星号,则需要在SQL中连接字符串,如下所示:
+ "'\"*' + @searchText + '*\"')" +
<强> EDIT2 强>:
Per @ steve的建议:
textToSearch = "'\"*" + textToSearch + "*\"'"
然后,您可以将SQL保留为更易读的SQL。
+ " @searchText)" +
答案 2 :(得分:2)
尝试构建参数值并使用参数。
SqlCommand sqlCmd = new SqlCommand(@"SELECT * FROM Table1
WHERE CONTAINS((col1, col2, col3), @searchText )
ORDER BY(SELECT null)
OFFSET(1) ROWS FETCH NEXT(100) ROWS ONLY"
, conn);
sqlCmd.Parameters.AddWithValue("@searchText", "\"*"+textToSearch+"*\"");