2012-08-29 5 views
0

내 배경은 다음과 같습니다. 사용자가 입력을 시작하면 데이터베이스 테이블의 열에서 제안 된 항목을 검색해야하는 콤보 상자가 있습니다.Access 데이터베이스 C# 쿼리 문제

 try{ 
      String temp = nameCBox.Text; 
      AutoCompleteStringCollection namesSuggestion = new AutoCompleteStringCollection(); 
      OleDbConnection conn = new OleDbConnection("Provider=Microsoft.ACE.Oledb.12.0;Data Source=C:\\LogEntry\\LogEntry.accdb; Persist Security Info = False;"); 
      OleDbDataReader reader; 
      conn.Open(); 
      String text2send = "Select Name from [Teachers] where FName like '" + temp + "' OR LName like '" + temp + "' Group by [Name]"; 
      OleDbCommand cmd = new OleDbCommand(text2send, conn); 
      reader = cmd.ExecuteReader(); 
      if (reader.HasRows == true) 
      { 
       while (reader.Read()) 
        namesSuggestion.Add(reader["temp"].ToString()); 
      } 
      reader.Close(); 
      nameCBox.AutoCompleteCustomSource = namesSuggestion; 

      conn.Close(); 
      } 

오류 : 사용자 이름을 inputing 시작하고 프로그램 이름과 성을 모두보고 이름을 제안한다 (데이터베이스가 모두 별도의 테이블이) 여기

은 내가 가진 코드는 1) 콤보 상자에 아무런 제안이 없습니다. 2) 콤보 상자에 입력하면 텍스트가 강조 표시되고 다른 내용을 다시 입력하면 이전에 입력 한 문자에 쓰여집니다.

이 desktopmaker

+0

첫 번째 제안 : 매개 변수가있는 쿼리를 사용하십시오. http://msdn.microsoft.com/en-us/library/system.data.oledb.oledbparameter%28v=vs.100%29.aspx – varg

답변

0

당신이 연산자처럼 사용하고 있기 때문에, 다음과 같이 사이의 입력 만들려고 제발 도와주세요 : %input% 같은 것을 활용하려면 다음

this에서 봐를, 그것은

도움이 될 수 있습니다

:
var sql = String.Format("Select Name from [Teachers] WHERE FName Like '%{0}%' OR LName Like '%{0}%'", temp); 

다른 점은 현재 코드에 대한 도움이 될 수 있습니다3210

  • 코드에서 using 문을 사용하면 리소스가 삭제되고 Connection의 경우 리소스가 닫힙니다.

    using(var conn = new OleDbConnection("ConnectionStrong")) 
    { 
        //code 
    } 
    
  • 가장

    는 매개 변수화 된 쿼리 Link

+0

이렇게, 뭔가? 'String text2send = String.Format ("SELECT 이름 FROM [Teachers] WHERE FName이 % {0} % 또는 LName과 같이 % {0} % Group과 같이 [Name] ", temp, temp); ' – desktopmaker

+0

아니오, 임시 견권을 넣을 필요가 없습니다. – SidAhmed

+0

SidAhmed를 보내려면 내 게시글을 편집했습니다. "쿼리 식의 구문 오류 '와 같은 구문 오류가 나타납니다. % s % OR LName % s % – desktopmaker

0

를 사용하는

이다이 일을

namesSuggestion.Add(reader["temp"].ToString()); 

독자는 ..

이름라는 열을 반환 무슨

나는 사용자가 검색 문자열에 와일드 카드를 포함 할 것으로 예상하여 입력하지 않을 것입니다.

예. Like 'John%' 또는 Like '%Smith' 표준 SQL에서 access는 % 대신에 *를 사용합니다.

아 그리고 아마 당신은 SQL 주입 공격에 대해 걱정하지 않습니까 ??

+0

대신 비표준 try *입니다. 독자가 namesSuggestion의 Name 열에서 검색된 값을 모두 넣길 원합니다. 이것은 처음으로 액세스 데이터베이스를 작성한 것입니다. 제가 배우면서 배우고 있습니다. 필자는 데이터베이스에 값을 추가 할 때 매개 변수 쿼리를 사용했지만 데이터 검색을 수행 할 때 필자는 그것에 대해 생각하지 않았습니다. – desktopmaker

+0

매개 변수화 된 쿼리를 사용하는 것이 더 낫습니다. 자신에게 은혜를 베풀고 그것을 사용하는 법을 배우십시오. 이것은 SQL 주입 공격으로부터 응용 프로그램을 보호합니다. – varg

+0

namesSuggestion.Add (reader [ "Name"]. ToString());이어야합니다. 그때... –