반응형
SQL LIKE 절에서 SqlParameter 사용이 작동하지 않음
다음 코드가 있습니다.
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 + "%'");
...
}
하지만 이것도 역시 효과가 없습니다.무엇이 잘못되고 있습니까?좋은 의견이라도 있나?
원하는 것은 다음과 같습니다.
tblCustomerInfo.Info LIKE '%' + @SEARCH + '%'
(또는 매개 변수 값을 편집하여 %를 첫 번째 위치에 포함).
그렇지 않으면 문자 "@SEARCH"(arg-value가 아님)를 (첫 번째 샘플) 검색하거나 추가 따옴표를 쿼리에 포함합니다(두 번째 샘플).
어떤 면에서는 TSQL을 사용하는 것이 더 쉬울 수 있습니다.LIKE @SEARCH
전화를 걸었을 때 처리할 수 있습니다.
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%');";
다음 코드 사용:
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 + '%');";
Add 및 AddWithValue 메서드 간에 약간의 차이가 있으므로 조금만 주의하십시오.Add 메서드를 사용하여 SqlType 매개 변수를 잘못 입력했을 때 아래와 같은 문제가 발생했습니다.
nchar
유니코드 문자를 저장할 수 있습니다.char
유니코드 문자를 저장할 수 없습니다.
예:
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!!!
실제로 매개 변수를 사용하는 대신 값을 직접 추가할 수 있습니다.예를 들어, 이것이 제가 구현한 방법이며 잘 작동합니다.건배!
string name = "test";
string nameCondition= " and FirstName like '%"+ name +"%' or MiddleName like '%" + name +"%' or LastName like '%"+name+"%'";
할 수 있습니다LIKE @SEARCH
그리고 당신의 C# 코드에서, 하기.
searchString = "%" + searchString + "%"
언급URL : https://stackoverflow.com/questions/665129/use-of-sqlparameter-in-sql-like-clause-not-working
반응형
'source' 카테고리의 다른 글
mongodb에서 컬렉션당 둘 이상의 스키마 사용 (0) | 2023.05.09 |
---|---|
SQL 연결이 삭제되기 전에 닫아야 합니까()해야 합니까? (0) | 2023.05.09 |
이클립스에서 기존 프로젝트를 여는 방법 (0) | 2023.05.09 |
이클립스 안드로이드 플러그인 -- libncurses.so .5 (0) | 2023.05.09 |
일반 목록/에뮬레이터를 데이터 테이블로 변환하시겠습니까? (0) | 2023.05.09 |