2012-08-29 115 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(); 
      } 

錯誤: 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); 

其他景點可能是你目前的代碼有所幫助:

  • 使用using聲明在你的代碼,它配置的資源,併爲連接,它關閉。

    using(var conn = new OleDbConnection("ConnectionStrong")) 
    { 
        //code 
    } 
    
  • 最好的,是使用參數化查詢Link

+0

所以,這樣的事情?「字符串text2send =的String.Format(」SELECT名稱FROM [教師] WHERE FName類似於%{0}%或LName類似於%{0}%按[名稱]分組「),temp,temp);' – desktopmaker

+0

不,沒有必要把溫度拖曳時間,我編輯我的帖子,讓你的整個Sql發送 – SidAhmed

+0

SidAhmed,我得到一個語法錯誤,說:「查詢表達式中的語法錯誤'FName像%s%或L名稱%s% '。 – desktopmaker

0

這是什麼做

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

閱讀器返回一個叫做名稱..

我wouldunless用戶輸入它期望搜索字符串包含通配符。

E.g. Like 'John%'Like '%Smith'在標準的SQL,訪問使用*而不是%我似乎記得。

哦,想必你是不是擔心SQL注入攻擊?

+0

我希望讀者將所有從列名稱中檢索到的值放在namesSuggestion中。 這是我第一次訪問數據庫,我正在學習。在將值添加到數據庫中時我使用了參數查詢,但是當我進行數據檢索時我沒有考慮它。 – desktopmaker

+0

使用參數化查詢顯然更好。幫你一個忙,並學習如何使用它們。這可以防止您的應用程序從SQL注入攻擊。 – varg

+0

應該是namesSuggestion.Add(reader [「Name」]。ToString());然後... –