我在sql数据库的asp.net mvc应用程序中进行基于关键字的搜索。
数据库有一个表Resources,其中包含以下格式的条目:
资源 英语pdf 数学基础书 英语词汇
然后要求用户输入一个查询,该查询生成与查询匹配的资源:
e.g。用户输入“获取所有英文书籍”
query = "Get all english books";
我首先标记查询字符串并将内容推送到数组中:
string[] keywords = query.Split(' ');
我使用表中所有条目的所有关键字进行基于关键字的匹配。如果任何资源中存在任何关键字,则返回该行。
由于我不知道先前关键字的数量是多少,所以我必须编写一个动态查询字符串。这是我写的代码:
using (SqlConnection sqlConnection = new SqlConnection(connectionString))
{
sqlConnection.Open();
// Tokenize the query
String[] tokens = searchQuery.Split(' ');
if (tokens.Length != 0) {
string query = "SELECT * FROM Queries WHERE query LIKE '(%'" + "@0" + "'%)'";
for (int i = 1; i < tokens.Length; i++)
query += " OR query LIKE '(%'" + "@" + i + "'%)'";
query += ";";
Console.WriteLine("The query is : " + query);
Console.ReadLine();
SqlCommand sqlCommand = new SqlCommand(query, sqlConnection);
sqlCommand.CommandType = System.Data.CommandType.Text;
for (int i = 0; i < tokens.Length; i++)
sqlCommand.Parameters.AddWithValue("@"+i, tokens[i]);
using (SqlDataReader reader = sqlCommand.ExecuteReader())
{
while (reader.Read())
{
Console.WriteLine("{0}", reader[1]);
}
}
}
这不会产生预期的输出。有人可以有这方面的经验。