2011-06-05 41 views
2
private void Filtriraj() 
    { 
     string filter = string.Empty; 
     if (txtID.Text.Length > 0) 
     { 
      filter = "ID LIKE '%" + txtID.Text + "%'"; 
     } 
     if (txtName.Text.Length > 0) 
     { 
      filter = "Name LIKE '%" + txtName.Text + "%'"; 
     } 
    } 

我想在我的c#應用程序中通過ms訪問數據庫表進行搜索。上面的一個連接到「Table1」,它具有一些字段,如ID,姓名,地址... ID類型設置爲自動編號,其他都是文本。我能夠搜索除ID以外的所有領域,這種方式以上不會工作,我得到例外,當我嘗試通過ID搜索(我鍵入txtbox中的一些身份證號碼,在分貝,exmp:'1') 搜索txtName工作正常。c#搜索ms按ID訪問db

回答

5

自動編號是某種形式的編號(我認爲長),因此您不能使用LIKE關鍵字。您必須搜索完全匹配(或大於,小於等)。你也不能用單引號包圍數字,所以需要刪除這些數字。

我想你的代碼切換到這樣的事情:

. 
. 
. 
if (txtID.Text.Length > 0) 
{ 
    int id; 
    if (Int32.TryParse(txtID.Text, out id)) 
    { 
     filter = "ID = " + id.ToString(); 
    } 
} 
. 
. 
. 

另外,你的代碼看起來一樣,如果你擁有一個充滿數據的多個文本框(因爲你不使用否則,如果它不能正常工作)。無論您最後檢查哪個文本框,都將最終成爲使用的過濾器,因爲您每次都重新指定過濾器變量。如果您直接從文本框中使用過濾器文本,那麼您可以打開自己的文檔,並可能會出現SQL Injection。你應該看看使用parameterized queries

+0

好吧,我仍然無法找到完全匹配的搜索 – djuvec12 2011-06-05 12:10:44

+0

@ djuvec12:我添加了一個例子。 TryParse是爲了確保ID文本框實際上包含一個數字。否則,當用戶輸入類似ABC的內容時,如果您嘗試搜索ID字段,則會發生錯誤。 – 2011-06-05 12:12:40

+0

現在,它的作品,非常感謝你的幫助! – djuvec12 2011-06-05 12:16:21