J'ai le code suivant:
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);
...
}
Cela ne fonctionne pas, j'ai aussi essayé ceci:
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 + "%'");
...
}
mais cela ne fonctionne pas aussi bien. Qu'est-ce qui ne va pas? Aucune suggestion?
Ce que tu veux c'est:
tblCustomerInfo.Info LIKE '%' + @SEARCH + '%'
(ou éditez la valeur du paramètre pour inclure le% en premier lieu).
Sinon, vous recherchez (le premier échantillon) le literal "@SEARCH" (et non la valeur arg), ou vous intégrez des guillemets supplémentaires dans la requête (deuxième échantillon).
D'une certaine manière, il serait peut-être plus facile que TSQL utilise simplement LIKE @SEARCH
et le gère chez l'appelant:
command.Parameters.AddWithValue("@SEARCH","%" + searchString + "%");
L'une ou l'autre approche devrait fonctionner.
À la place d'utiliser:
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%');";
Utilisez ce code:
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 + '%');";
Juste un peu prudent avec une légère différence entre Add et AddWithValue method. J'ai eu le problème ci-dessous, quand j'ai utilisé la méthode Add et mis le mauvais paramètre SqlType .
nchar
etnvarchar
peut stocker Unicode caractères.char
etvarchar
ne peut pas stocker de caractères Unicode .Par exemple:
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
Lorsque j'ai changé le SqlType en NVarChar , les deux méthodes ont bien fonctionné pour moi.
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!!!