DataSet将变为空

时间:2013-06-13 07:10:03

标签: c# asp.net ms-access web-applications

我有一个名为searchDB的方法,它根据用户输入的关键字搜索数据库。

我将搜索结果存储在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;
        }

变量“identifier”从textbox获取值。 假设,当我将“windows”作为变量的值传递时,它应该返回1行。 但是,当我放置断点时,它正在达到if条件

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

并返回0行。

任何人都可以指出我的错误。

2 个答案:

答案 0 :(得分:0)

您似乎使用了SQL LIKE错误(除非您的identifier列真的以星号结尾):

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

喜欢使用%字符作为通配符,而不是*,所以请尝试:

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

编辑:我没有看到问题与MS Access有关,但答案仍然适用。请参阅以下SO问题:Why does a LIKE query in Access not return any records?

  

Access数据库引擎(Jet,ACE,等等)有两种ANSI查询模式,每种模式使用不同的通配符> LIKE的字符:

     
      
  • ANSI-89查询模式使用*
  •   
  • ANSI-92查询模式使用%
  •   

答案 1 :(得分:0)

LIKE过滤器应该使用%代替*,例如:

 LIKE '" + identifier + "%'