我有以下代码:
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 + "%'");
...
}
但这不起作用。出了什么问题?有什么建议吗?
答案 0 :(得分:108)
你想要的是:
tblCustomerInfo.Info LIKE '%' + @SEARCH + '%'
(或编辑参数值以包含%在第一位)。
否则,您要么(第一个样本)搜索 literal “@SEARCH”(不是arg-value),要么在查询中嵌入一些额外的引号(第二个示例)。
在某些方面,让TSQL使用LIKE @SEARCH
可能更容易,并在调用者处理它:
command.Parameters.AddWithValue("@SEARCH","%" + searchString + "%");
任何一种方法都应该有效。
答案 1 :(得分:2)
而不是使用:
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%');";
使用此代码:
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 + '%');";
答案 2 :(得分:0)
请稍稍注意,添加和 AddWithValue 方法之间的区别。当我使用 Add 方法并输入错误的 SqlType 参数时,出现以下问题。
nchar
和 nvarchar
可以存储 Unicode 个字符。char
和 varchar
无法存储Unicode 字符。例如:
string query = " ... WHERE stLogin LIKE @LOGIN ";
SqlParameter p = new SqlParameter("@LOGIN", SqlDbType.Char, 255)
{
Value = "%" + login + "%"
};
command.Parameters.AddWithValue(p.ParameterName, p.Value); //works fine!!!
command.Parameters.Add(p); // won't work
当我将 SqlType 更改为 NVarChar 时,这两种方法对我来说都很好。
SqlParameter p = new SqlParameter("@LOGIN", SqlDbType.NVarChar, 255)
{
Value = "%" + login + "%"
};
command.Parameters.AddWithValue(p.ParameterName, p.Value); //worked fine!!!
command.Parameters.Add(p); //worked fine!!!
答案 3 :(得分:-5)
您可以执行LIKE @SEARCH
并在C#代码中执行
searchString = "%" + searchString + "%"