C#& SQL Server:向查询添加参数

时间:2017-07-12 17:32:04

标签: 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本身。

我在这里看了类似的帖子并试图效仿,但它没有用,可能是因为格式中有一个撇号和一个引号和一个星号。

我做错了什么?

我应该如何指定此命令?

3 个答案:

答案 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+"*\"");