遇到多种查询条件的循环拼接sql查询串的方法

遇到多种查询条件的循环拼接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";
            }
        }

猜你喜欢

转载自blog.csdn.net/weixin_42727550/article/details/83994013