2013-06-13 33 views
1

我有一個名爲searchDB的方法,它根據用戶鍵入的關鍵字搜索數據庫。DataSet爲空

我將搜索結果存儲在DataSet中。此方法僅在一列中搜索。

 public DataSet searchDB(string identifier) 
     { 
      DataSet dataSet = new DataSet(); 
      OleDbConnection oleConn = new OleDbConnection(connString); 

      try 
      { 
       oleConn.Open(); 
       string sql = "SELECT [identifier] FROM [Category3] WHERE [identifier] LIKE '" + identifier + "*'"; 
       //string sql = "SELECT [identifier] FROM [Category3]"; 

       OleDbDataAdapter dataAdapter = new OleDbDataAdapter(sql, oleConn); 
       dataAdapter.Fill(dataSet, "identifier"); 
      } 
      catch (Exception ex) 
      { 
       Console.WriteLine(ex.ToString()); 
      } 
      finally 
      { 
       oleConn.Close(); 
      } 
      if (dataSet.Tables[0].Rows.Count == 0) 
       { 
        return null; 
       } 
      else 
       return dataSet; 
     } 

變量「標識符」從textbox獲取值。 假設,當我傳遞「windows」作爲變量的值時,它應該返回1行。 但是當我把斷點,它的擊球,如果條件

if (dataSet.Tables[0].Rows.Count == 0) 
{ 
    return null; 
} 

並返回0行。

任何人都可以指出我的錯誤。

+0

use this:string sql =「SELECT [identifier] FROM [Category3] WHERE [identifier] LIKE'%」+ identifier +「%'」; –

回答

0

你似乎使用SQL LIKE錯誤(除非你identifier柱確實有星號結尾):

SELECT [identifier] FROM [Category3] WHERE [identifier] LIKE '" + identifier + "*' 

像使用通配符的%字符,而不是*,所以嘗試:

SELECT [identifier] FROM [Category3] WHERE [identifier] LIKE '" + identifier + "%' 

編輯:我沒有看到這個問題涉及中號S Access,但答案仍然成立。請參見下面的SO問題:Why does a LIKE query in Access not return any records?

Access數據庫引擎(Jet,ACE,無論)具有兩個ANSI查詢模式,其中每個使用不同的通配符>字符LIKE:

  • ANSI-89查詢模式使用*
  • ANSI-92查詢模式使用%
+1

但我使用MS訪問,我認爲它使用* –

+0

它實際上工作...嗯,我認爲訪問使用*而不是% –

+0

嗯是的,我檢查了MS Access,他們似乎確實使用'*'。但如果它適合你,那麼一切都很好。 –

0

的LIKE過濾器能夠使用的%*,而不是像這裏:

LIKE '" + identifier + "%'