Exemplo n.º 1
0
        /// <summary>
        /// 根据查询条件创建Sql命令
        /// </summary>
        /// <param name="searchExpression"></param>
        /// <param name="searchOrders"></param>
        /// <returns></returns>
        public virtual DbCommand CreateDbCommand(ISearchExpression searchExpression, IList <ISearchOrder> searchOrders)
        {
            DbCommand cmd = DbHelper.Instance.Database.DbProviderFactory.CreateCommand();

            cmd.CommandType = System.Data.CommandType.Text;

            if (searchExpression is QueryExpression)
            {
                string s = (searchExpression as QueryExpression).Query;
                cmd.CommandText = s;
            }
            else
            {
                int paramCnt = 0;

                if (this.EnablePage && m_dataCanPage)
                {
                }
                else
                {
                    cmd.CommandText = m_selectSql;

                    // Add Where
                    if (searchExpression != null)
                    {
                        string s = SearchManager.FillDbCommand(searchExpression, cmd.Parameters, false, ref paramCnt, m_selectAsColumns);
                        if (!string.IsNullOrEmpty(s))
                        {
                            cmd.CommandText += " WHERE " + s;
                        }
                    }

                    string groupBy = SearchManager.GetGroupCommand(m_groupBySql);
                    if (!string.IsNullOrEmpty(groupBy))
                    {
                        cmd.CommandText += groupBy;

                        // Add Having
                        if (searchExpression != null)
                        {
                            string s = SearchManager.FillDbCommand(searchExpression, cmd.Parameters, true, ref paramCnt, m_selectAsColumns);
                            if (!string.IsNullOrEmpty(s))
                            {
                                cmd.CommandText += " HAVING " + s;
                            }
                        }
                    }

                    cmd.CommandText += SearchManager.GetSqlOrders(searchOrders, false, null);
                }

                if (paramCnt > 2100)
                {
                    throw new NotSupportedException("您输入的参数过多,系统最多只支持2100个参数!");
                }
            }

            return(cmd);
        }
Exemplo n.º 2
0
        /// <summary>
        ///
        /// </summary>
        /// <param name="searchExpression"></param>
        /// <returns></returns>
        public virtual DbCommand CreateCountDbCommand(ISearchExpression searchExpression)
        {
            DbCommand cmd = DbHelper.Instance.Database.DbProviderFactory.CreateCommand();

            cmd.CommandType = System.Data.CommandType.Text;

            if (searchExpression is QueryExpression)
            {
                string str = (searchExpression as QueryExpression).Query;
                str = str.ToUpper();
                int idx  = str.IndexOf("' '");
                int idx2 = str.IndexOf("FROM");
                str             = str.Replace(str.Substring(idx, idx2 - idx), " COUNT(*) ");
                cmd.CommandText = str;
            }
            else
            {
                int paramCnt = 0;
                // Add Where
                if (searchExpression != null)
                {
                    string s = SearchManager.FillDbCommand(searchExpression, cmd.Parameters, false, ref paramCnt, m_selectAsColumns);
                    if (!string.IsNullOrEmpty(s))
                    {
                        cmd.CommandText += " WHERE " + s;
                    }
                }

                string groupBy = SearchManager.GetGroupCommand(m_groupBySql);
                if (!string.IsNullOrEmpty(groupBy))
                {
                    cmd.CommandText += groupBy;

                    // Add Having
                    if (searchExpression != null)
                    {
                        string s = SearchManager.FillDbCommand(searchExpression, cmd.Parameters, true, ref paramCnt, m_selectAsColumns);
                        if (!string.IsNullOrEmpty(s))
                        {
                            cmd.CommandText += " HAVING " + s;
                        }
                    }
                }

                if (paramCnt > 2100)
                {
                    throw new NotSupportedException("您输入的参数过多,系统最多只支持2100个参数!");
                }
            }

            return(cmd);
        }