2013-06-13 37 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 + "%'