当前位置:  开发笔记 > 编程语言 > 正文

在SQL LIKE子句中使用SqlParameter不起作用

如何解决《在SQLLIKE子句中使用SqlParameter不起作用》经验,为你挑选了1个好方法。

我有以下代码:

const string Sql = 
    @"select distinct [name] 
      from tblCustomers 
      left outer join tblCustomerInfo on tblCustomers.Id = tblCustomerInfo.CustomerId  
      where (tblCustomer.Name LIKE '%@SEARCH%' OR tblCustomerInfo.Info LIKE '%@SEARCH%');";

using (var command = new SqlCommand(Sql, Connection))
{       
    command.Parameters.AddWithValue("@SEARCH", searchString);
    ...
}

这不起作用,我也试过这个:

const string Sql = 
    @"select distinct [name] 
     from tblCustomers 
     left outer join tblCustomerInfo on tblCustomers.Id = tblCustomerInfo.CustomerId  
     where (tblCustomer.Name LIKE @SEARCH OR tblCustomerInfo.Info LIKE @SEARCH );";

using (var command = new SqlCommand(Sql, Connection))
{       
    command.Parameters.AddWithValue("@SEARCH", "'%" + searchString + "%'");
    ...
}

但这不行.出了什么问题?有什么建议?



1> Marc Gravell..:

你想要的是:

tblCustomerInfo.Info LIKE '%' + @SEARCH + '%'

(或编辑参数值以包含%在第一位).

否则,您要么(第一个样本)搜索文字 "@SEARCH"(不是arg-value),要么在查询中嵌入一些额外的引号(第二个样本).

在某些方面,使用TSQL可能更容易LIKE @SEARCH,并在调用者处理它:

command.Parameters.AddWithValue("@SEARCH","%" + searchString + "%");

这两种方法都应该有效.


当searchString包含字符`%``_`或`[`时,这将无法正常工作,假设你想要实际搜索其中一个字符文字.对于100%的解决方案,您需要将这些字符包装在方括号`[]`的searchString中.C#代码`Regex.Replace(searchString,@"([%_\[])",@"[$ 1]")`就可以了.
推荐阅读
保佑欣疼你的芯疼
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有