我在一个在线搜索项目上工作 我想制作一个搜索文本框,其工作方式如下:如果我想搜索一本书,那本书用标题书写我的书,而出版商就是tia。 我在搜索中输入:joe my book tia或tia jo book> 所以我会得到一个结果。 tia来自SQL数据库中的一个表 joe来自SQL数据库中的表 我的书来自SQL数据库中的表
有人能帮助我吗?
答案 0 :(得分:0)
如果将另一列(包含来自其他三列的连接数据)添加到数据表(在数据库中),然后在该列中进行搜索,则可以轻松完成此操作。
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 );
如果您还有其他问题,请询问。