我有这个查询(本身不重要):
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
本身放入。
我在这里查看了类似的帖子并尝试关注但没有成功,可能是因为格式中有一个撇号、一个引号和一个星号。
我做错了什么?
我应该如何指定这个命令?
最佳答案
您将参数括在为字符串保留的单引号内。
删除参数周围的单引号,你应该没问题:
你的:
+ "'\"@searchText\"' )" +
正确:
+ " @searchText)" +
编辑:
如果您想在搜索内容中包含双引号和星号,您需要像这样在 SQL 中连接字符串:
+ "'\"*' + @searchText + '*\"')" +
EDIT2:
根据@steve 的建议:
textToSearch = "'\"*" + textToSearch + "*\"'"
然后,您可以将 SQL 保留为更具可读性的 SQL。
+ " @searchText)" +
关于C# 和 SQL 服务器 : add parameter to query,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45064204/