2013-08-23 5 views
0

아래는 데이터베이스로 이동하여 데이터베이스의 것과 비슷한 controlNumber를 가져 오는 함수입니다. 위에서 주석 처리 된 섹션에서 볼 수 있듯이 controlNumber의 마지막 3 자리를 와일드 카드 인디케이터 ()로 바꾸려면 해당 라인 아래의 컨트롤 번호와 비슷한 컨트롤 번호 만 데이터베이스에서 검색합니다 ("1289 ** ")OleDB DataAdapter를 사용한 쿼리

데이터베이스 내에서"SELECT * FROM Orders Where Control_Number LIKE '1298 ***'; "쿼리를 사용할 수 있습니다. 나는 올바른 정보를 얻었습니다. 하지만이 메서드를 사용하여 코드에서 시도 할 때 0 행이 반환됩니다.

어떤 도움이 필요합니까?

참고 : 내가 대신 *의 와일드 카드 문자로하지 않는 MySQL은, 액세스 데이터베이스에

public string ABSCheckControlNumberForAccuracy(string _controlNumber,string _zip,string _state, string _city) 
     { 
      //_controlNumber = _controlNumber.Remove(_controlNumber.Length - 3) + "***"; 
      _controlNumber = "1298***"; 
      OleDbConnection conn = new OleDbConnection(strAccessConnTaxCert); 

      string query = "SELECT * FROM Orders WHERE Control_Number LIKE @_controlNumber;"; 


      OleDbCommand cmd = new OleDbCommand(query, conn); 

      cmd.CommandText = query; 
      OleDbDataAdapter adapter = new OleDbDataAdapter(query, conn); 
      adapter.SelectCommand.Parameters.Add("@_controlNumber", OleDbType.VarChar).Value = "%" + _controlNumber + "%"; 
         System.Data.DataTable dt = new System.Data.DataTable(); 
      try 
      { 
       conn.Open(); 
       adapter.Fill(dt); 
      } 

      catch (System.Exception ex) 
      { 
           throw; 
      } 
      finally 
      { 
       if (conn.State == ConnectionState.Open) 
       { 
        conn.Close(); 
       } 
      } 
      return dt.Rows[0][0].ToString();    
     } 

답변

4

사용 %를 예정하고있다. %는 defacto 와일드 카드입니다. oledb 드라이버는 대상 데이터베이스가 예상하는 와일드 카드 문자로이를 변환합니다.

편집 : 질문을 다시 읽었습니다. %를 사용해서는 안되지만 사용해야합니까? 대신. ? 정확히 한 문자를 사용해야하는 와일드 카드입니다.

이 쿼리에, 또한이

select * from table where foo like '567???' 

과 같이 쿼리 대신 문자열 연결의 매개 변수를 사용하려고한다는 뜻.