Ich habe folgenden 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%');";
using (var command = new SqlCommand(Sql, Connection))
{
command.Parameters.AddWithValue("@SEARCH", searchString);
...
}
Das funktioniert nicht, ich habe es auch versucht:
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 + "%'");
...
}
aber das funktioniert nicht so gut. Was läuft falsch? Irgendwelche Vorschläge?
%
_
oder[
wenn Sie tatsächlich nach einem dieser Zeichenliterale suchen möchten. Für eine 100% ige Lösung müssen Sie diese Zeichen in Klammern in den searchString einschließen[]
. Der C # -CodeRegex.Replace(searchString, @"([%_\[])", @"[$1]")
macht den Trick.command.Parameters.AddWithValue("@SEARCH","%[" + searchString + "]%");
anstatt dass der reguläre Ausdruck nicht funktioniert?Anstatt zu verwenden:
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%');";
Verwenden Sie diesen 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 + '%');";
quelle
Nur ein wenig vorsichtig mit einem kleinen Unterschied zwischen den Methoden Add und AddWithValue . Ich hatte das folgende Problem, als ich die Add- Methode verwendete und den falschen SqlType- Parameter einfügte .
nchar
undnvarchar
kann Unicode- Zeichen speichern .char
und kann keine Unicode- Zeichen speichern .varchar
Zum Beispiel:
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
Als ich den SqlType in NVarChar geändert habe , haben die beiden Methoden für mich gut funktioniert.
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!!!
quelle
Sie könnten es tun
LIKE @SEARCH
und in Ihrem C # -Code tunsearchString = "%" + searchString + "%"
quelle