예제 #1
0
        /// <summary>
        /// 建立分组条件
        /// </summary>
        /// <returns></returns>
        private string BuildGroupParameterCondiction()
        {
            Hashtable     ht         = GetGroupNames();
            SearchInfo    searchInfo = null;
            StringBuilder sb         = new StringBuilder();
            string        sql        = string.Empty;
            string        tempSql    = string.Empty;

            foreach (string groupName in ht.Keys)
            {
                sb      = new StringBuilder();
                tempSql = " AND ({0})";
                foreach (DictionaryEntry de in this.conditionTable)
                {
                    if (de.Value != null)
                    {
                        if (de.Value.GetType() != typeof(SearchInfo))
                        {
                            continue;
                        }
                        searchInfo = (SearchInfo)de.Value;

                        //如果选择ExcludeIfEmpty为True,并且该字段为空值的话,跳过
                        if (searchInfo.ExcludeIfEmpty &&
                            (searchInfo.FieldValue == null || string.IsNullOrEmpty(searchInfo.FieldValue.ToString().Trim())))
                        {
                            continue;
                        }

                        if (groupName.Equals(searchInfo.GroupName, StringComparison.OrdinalIgnoreCase))
                        {
                            if (searchInfo.SqlOperator == SqlOperator.Like)
                            {
                                sb.AppendFormat(" OR {0} {1} {2}", searchInfo.FieldName,
                                                this.ConvertSqlOperator(searchInfo.SqlOperator), string.Format(":{0}", searchInfo.ParameterName));
                            }
                            else
                            {
                                sb.AppendFormat(" OR {0} {1} {2}", searchInfo.FieldName,
                                                this.ConvertSqlOperator(searchInfo.SqlOperator), string.Format(":{0}", searchInfo.ParameterName));
                            }
                        }
                    }
                }

                if (!string.IsNullOrEmpty(sb.ToString()))
                {
                    tempSql = string.Format(tempSql, sb.ToString().Substring(3));//从第一个Or开始位置
                    sql    += tempSql;
                }
            }

            return(sql);
        }
예제 #2
0
 public void SetParameterValue(ISQLQuery query)
 {
     foreach (DictionaryEntry de in this.ConditionTable)
     {
         if (de.Value != null)
         {
             if (de.Value.GetType() != typeof(SearchInfo))
             {
                 continue;
             }
             SearchInfo searchInfo = (SearchInfo)de.Value;
             if (searchInfo.FieldValue != null && !string.IsNullOrEmpty(searchInfo.FieldValue.ToString().Trim()))
             {
                 query.SetParameter(string.Format("{0}", searchInfo.ParameterName), searchInfo.FieldValue);
             }
         }
     }
 }
예제 #3
0
        /// <summary>
        /// 获取给定条件集合的组别对象集合
        /// </summary>
        /// <returns></returns>
        private Hashtable GetGroupNames()
        {
            Hashtable  htGroupNames = new Hashtable();
            SearchInfo searchInfo   = null;

            foreach (DictionaryEntry de in this.conditionTable)
            {
                if (de.Value != null)
                {
                    if (de.Value.GetType() != typeof(SearchInfo))
                    {
                        continue;
                    }
                    searchInfo = (SearchInfo)de.Value;
                    if (!string.IsNullOrEmpty(searchInfo.GroupName) && !htGroupNames.Contains(searchInfo.GroupName))
                    {
                        htGroupNames.Add(searchInfo.GroupName, searchInfo.GroupName);
                    }
                }
            }

            return(htGroupNames);
        }
예제 #4
0
        /// <summary>
        /// 根据对象构造相关的条件语句(不使用参数),如返回的语句是:
        /// <![CDATA[
        /// Where (1=1)  AND Test4  <  'Value4' AND Test6  >=  'Value6' AND Test7  <=  'value7' AND Test  <>  '1' AND Test5  >  'Value5' AND Test2  Like  '%Value2%' AND Test3  =  'Value3'
        /// ]]>
        /// </summary>
        /// <returns></returns>
        public string BuildParameterConditionSql(bool withWhere)
        {
            string sql = "";

            if (withWhere)
            {
                sql = " Where (1=1) ";
            }
            else
            {
                sql = "(1=1)";
            }
            string     fieldName  = string.Empty;
            SearchInfo searchInfo = null;

            StringBuilder sb = new StringBuilder();

            sql += BuildGroupParameterCondiction();

            foreach (DictionaryEntry de in this.conditionTable)
            {
                if (de.Value != null)
                {
                    if (de.Value.GetType() != typeof(SearchInfo))
                    {
                        continue;
                    }
                    searchInfo = (SearchInfo)de.Value;

                    //如果只是作为参数,不参与sql条件的生成。
                    if (searchInfo.ParameterOnly)
                    {
                        continue;
                    }

                    //如果选择ExcludeIfEmpty为True,并且该字段为空值的话,跳过
                    if (searchInfo.ExcludeIfEmpty &&
                        (searchInfo.FieldValue == null || string.IsNullOrEmpty(searchInfo.FieldValue.ToString().Trim())))
                    {
                        continue;
                    }

                    //只有组别名称为空才继续,即正常的sql条件
                    if (string.IsNullOrEmpty(searchInfo.GroupName))
                    {
                        if (searchInfo.SqlOperator == SqlOperator.Like)
                        {
                            sb.AppendFormat(" AND {0} {1} {2}", searchInfo.FieldName,
                                            this.ConvertSqlOperator(searchInfo.SqlOperator), string.Format(":{0}", searchInfo.ParameterName));
                        }
                        else if (searchInfo.SqlOperator == SqlOperator.In)
                        {
                            sb.AppendFormat(" AND {0} {1} {2}", searchInfo.FieldName,
                                            this.ConvertSqlOperator(searchInfo.SqlOperator), string.Format("(:{0})", searchInfo.ParameterName));
                        }
                        else
                        {
                            sb.AppendFormat(" AND {0} {1} {2}", searchInfo.FieldName,
                                            this.ConvertSqlOperator(searchInfo.SqlOperator), string.Format(":{0}", searchInfo.ParameterName));
                        }
                    }
                }
            }

            sql += sb.ToString();

            return(sql);
        }