遇到多种查询条件的循环拼接sql查询串的方法
// CompanyName ='分公司' and IsDel=0 and LegalPerson 多个字段and查询,如果某个字段值为空,就不and该字段。
public string DynamicSql(QueryFiled queryvalue)
{
//模拟查询条件
queryvalue.CompanyName = "分公司";
queryvalue.LegalPerson = "";
queryvalue.IsDel = 0;
SqlCommon sqlhelp = new SqlCommon();
StringBuilder sqlSB = new StringBuilder("select top 5 * from SystemCompany where ");
//Dictionary<string, object> para = new Dictionary<string, object>();
int flag = 0;//追加and的标识
foreach (System.Reflection.PropertyInfo p in queryvalue.GetType().GetProperties()) //反射
{
if (!string.IsNullOrEmpty(p.GetValue(queryvalue).ToString()))//如果不为空则拼接sql字符串
{
string QueryValue = p.GetValue(queryvalue).ToString();
if ( flag == 0)
{
sqlSB.Append(p.Name + " like'%"+ QueryValue+"%' ");
flag = 1; //sql查询串中已经有了第一个查询条件;后面拼接时要追加and
}
else
{
sqlSB.Append(" and "+p.Name + " = "+QueryValue+" ");
}
}
}
DataTable dt = sqlhelp.GetDataTable(sqlSB.ToString(), null);
if (dt.Rows.Count > 0)
{
return "right";
}
else
{
return "error";
}
}
查询条件集合类
public class QueryFiled
{
/// <summary>
/// 公司名称
/// </summary>
public string CompanyName { get; set; }
/// <summary>
/// 公司法人
/// </summary>
public string LegalPerson { get;set; }
/// <summary>
/// 是否伪删除,0:未删除 1:删除
/// </summary>
public int? IsDel { get; set;}
}
/// <summary>
/// 动态sql,字段名作为变量
/// </summary>
/// <returns></returns>
public string DynamicSql2()
{
string FieldName = "CompanyName";
string FieldValue = "分公司";
SqlCommon sqlhelp = new SqlCommon();
string sqlstr = "select top 5 * from SystemCompany where " + FieldName + " like '%" + FieldValue + "%'";
DataTable dt = sqlhelp.GetDataTable(sqlstr, null);
if (dt.Rows.Count > 0)
{
return "right";
}
else
{
return "error";
}
}