source

SQL LIKE 절에서 SqlParameter 사용이 작동하지 않음

factcode 2023. 5. 9. 23:03
반응형

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

SqlTypeNVarChar로 변경했을 때 두 가지 방법이 잘 작동했습니다.

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

반응형