我有一个名为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行。
任何人都可以指出我的错误。
答案 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 + "%'