C# 和 SQL 服务器 : add parameter to query

标签 c# sql-server

我有这个查询(本身不重要):

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/

相关文章:

c# - 如何让 scrapysharp 在 MVC Web 应用程序中工作?

mysql - 错误 phpmyadmin pma__tracking 和其他人不存在

c# - 使用 Linq 和 SQL 时如何防止将新记录插入表中?

sql - 如何计算 SQL 中特定值之间的差异的平均值?

c# - 在 C# 中将数据传递给 child 的 STDIN

c# - 使用 C#,如何获取我的机器是 64 位还是 32 位?

c# - 如何以类型安全的方式编写以列名作为参数的 LINQ 查询

c# - C# 中的列表转换

c# - 涉及 EntityFramework/SQL Server 和 NServiceBus/MSMQ 的分布式事务中的非同时提交

c# - 现有数据库的 Entity Framework 代码优先迁移策略