angular 中的高级搜索文本框
advance search text box in angular
我从事在线搜索项目
我想制作一个搜索文本框,其工作方式如下:如果我想搜索乔写的一本书,书名是我的书,出版商是 tia。
我输入搜索:joe my book tia 或 tia jo book >
所以我会得到一个结果。
tia 来自 SQL 数据库中的 table
joe 来自 SQL 数据库中的 table
我的书来自 SQL 数据库
中的 table
有人可以帮我吗?
如果您将另一列添加到您的数据 table(在您的数据库中),该列将包含来自其他三列的串联数据,然后在该列中进行搜索,您可以轻松完成此操作。
writer title publisher search_column
joe my book tia joe my book tia
然后,您可以使用 LIKE
进行 SQL 查询以按该列进行搜索
ExecuteReader 示例。
var query = "select * from my_table where 1 = 1 " + filterQuery;
创建参数:
public static SqlParameter AddSqlParameter(string parameterName, object value)
{
var p = new SqlParameter(parameterName, value);
return p;
}
List<SqlParameter> sqlParameters = new List<SqlParameter>();
var filterQuery = "";
这将按空格拆分您的搜索输入
string[] words = searchInput.Split(' ');
遍历您的搜索词组并为找到的每个词组添加一个参数:
for (int i = 0; i < words.Count; i++) {
sqlParameters.Add(AddSqlParameter("@p" + i.ToString(), words[i]));
filterQuery = filterQuery + " AND search_column LIKE " + "@p" + i.ToString();
}
将您的搜索查询和参数添加到 ExecuteReader:
public static List<T> ExecuteReader<T>(string commandText, List<SqlParameter> parameters) where T : new()
{
List<T> output = new List<T>();
using (SqlConnection con = new SqlConnection(mySetting.ConnectionString))
using (SqlCommand cmd = new SqlCommand(commandText, con))
{
cmd.Parameters.AddRange(parameters.ToArray());
con.Open();
using (SqlDataReader rdr = cmd.ExecuteReader())
{
while (rdr.Read())
{
T t = new T();
for (int i = 0; i < rdr.FieldCount; i++)
{
Type type = t.GetType();
PropertyInfo prop = type.GetProperty(rdr.GetName(i));
if (prop != null)
{
prop.SetValue(t, rdr.GetValue(i) is DBNull ? null : rdr.GetValue(i), null);
}
}
output.Add(t);
}
return output;
}
}
}
像这样调用您的 ExecuteReader:
var result = ExecuteReader<myClass>(query, sqlParameters );
如果您还有其他问题,请提出。
我从事在线搜索项目 我想制作一个搜索文本框,其工作方式如下:如果我想搜索乔写的一本书,书名是我的书,出版商是 tia。 我输入搜索:joe my book tia 或 tia jo book > 所以我会得到一个结果。 tia 来自 SQL 数据库中的 table joe 来自 SQL 数据库中的 table 我的书来自 SQL 数据库
中的 table有人可以帮我吗?
如果您将另一列添加到您的数据 table(在您的数据库中),该列将包含来自其他三列的串联数据,然后在该列中进行搜索,您可以轻松完成此操作。
writer title publisher search_column
joe my book tia joe my book tia
然后,您可以使用 LIKE
进行 SQL 查询以按该列进行搜索
ExecuteReader 示例。
var query = "select * from my_table where 1 = 1 " + filterQuery;
创建参数:
public static SqlParameter AddSqlParameter(string parameterName, object value)
{
var p = new SqlParameter(parameterName, value);
return p;
}
List<SqlParameter> sqlParameters = new List<SqlParameter>();
var filterQuery = "";
这将按空格拆分您的搜索输入
string[] words = searchInput.Split(' ');
遍历您的搜索词组并为找到的每个词组添加一个参数:
for (int i = 0; i < words.Count; i++) {
sqlParameters.Add(AddSqlParameter("@p" + i.ToString(), words[i]));
filterQuery = filterQuery + " AND search_column LIKE " + "@p" + i.ToString();
}
将您的搜索查询和参数添加到 ExecuteReader:
public static List<T> ExecuteReader<T>(string commandText, List<SqlParameter> parameters) where T : new()
{
List<T> output = new List<T>();
using (SqlConnection con = new SqlConnection(mySetting.ConnectionString))
using (SqlCommand cmd = new SqlCommand(commandText, con))
{
cmd.Parameters.AddRange(parameters.ToArray());
con.Open();
using (SqlDataReader rdr = cmd.ExecuteReader())
{
while (rdr.Read())
{
T t = new T();
for (int i = 0; i < rdr.FieldCount; i++)
{
Type type = t.GetType();
PropertyInfo prop = type.GetProperty(rdr.GetName(i));
if (prop != null)
{
prop.SetValue(t, rdr.GetValue(i) is DBNull ? null : rdr.GetValue(i), null);
}
}
output.Add(t);
}
return output;
}
}
}
像这样调用您的 ExecuteReader:
var result = ExecuteReader<myClass>(query, sqlParameters );
如果您还有其他问题,请提出。