예제 #1
0
        /// <summary>
        /// 导出报表
        /// </summary>
        /// <param name="reportSql">导出报表的SQL</param>
        /// <param name="where">过滤条件</param>
        /// <param name="order">排序字段</param>
        /// <returns></returns>
        public static DataSet GetReportExportData(string reportName, List <KeyValue> where, string order)
        {
            if (where == null)
            {
                where = new List <KeyValue>();
            }

            string reportPath = CReport.GetReportPath();             //报表路径

            if (string.IsNullOrEmpty(reportPath))
            {
                return(new DataSet());
            }
            string sqlCount  = "";
            string reportSql = CReport.GetSql(reportPath, reportName, where, ref sqlCount, 1).Replace("~", string.Empty);             //获取要查询的SQL语句 及其 参数

            if (string.IsNullOrEmpty(reportSql))
            {
                return(new DataSet());
            }
            string conString = CReport.GetConnection();             //获取SQL连接串

            if (string.IsNullOrEmpty(conString))
            {
                return(new DataSet());
            }
            string  sql   = reportSql;
            int     count = CheckExportCount(sql, conString, where, "");
            DataSet ds    = new DataSet();

            ds = ExcuteMSDs(sql, where, conString);

            //MonitorManager.SetReturnValue(string.Format("Excel导出{0}条", count));
            return(ds);
        }
예제 #2
0
        /// <summary>
        /// 导??出?报???表???
        /// </summary>
        /// <param name="reportSql"> 导??出?报???表???的??SQL </param>
        /// <param name="where"> 过y滤?条??件t </param>
        /// <param name="order"> 排?序??字??段? </param>
        /// <returns></returns>
        public static DataSet GetReportExportData(string reportName, List <KeyValue> where, int systemID,
                                                  ReportConnectionType type)
        {
            if (where == null)
            {
                where = new List <KeyValue>();
            }
            string reportPath = CReport.GetReportPath(systemID);             //报表路??径?


            if (string.IsNullOrEmpty(reportPath))
            {
                return(new DataSet());
            }
            string reportSql = CReport.GetSql(reportPath, reportName, where);             //获?取??要?a查??询??的??SQL语??句? 及??其? 参?数?y

            if (string.IsNullOrEmpty(reportSql))
            {
                return(new DataSet());
            }
            string conString = CReport.GetConnection(type);             //获?取??SQL连??接??串??

            if (string.IsNullOrEmpty(conString))
            {
                return(new DataSet());
            }
            string sql = reportSql;
            //int count = CheckExportCount(sql, conString, where, "");
            DataSet ds = new DataSet();

            //for (int i = 0; i < Math.Ceiling((double)count / 9000); i++)
            //{
            //    var sqlItem = string.Format(sql + " limit {0},{1}", i * 9000, 9000);
            //    if (ds.Tables.Count == 0)
            //    {
            //        ds = ExcuteMyDs(sqlItem, where, conString);
            //    }
            //    else
            //    {
            //        DataTable dt = ExcuteMyDs(sqlItem, where, conString).Tables[0];
            //        ds.Tables[0].Merge(dt);
            //    }
            //}
            //if (count == 0)
            //{
            ds = ExcuteMyDs(sql, where, conString);
            //}
            //MonitorManager.SetReturnValue(string.Format("Excel导??出?{0}条??", count));
            return(ds);
        }
예제 #3
0
        public static DataSet GetReportData(string reportName, GetReportDataParams param, out int totalCount, bool optimize = false)
        {
            int    pageSize  = param.PageSize;
            int    pageIndex = param.PageIndex;
            string order     = param.Order;

            List <KeyValue> where = param.Where;
            totalCount            = 0;
            if (pageIndex < 1)             //不能出现索引页小于1的情况,否则查询语句报错
            {
                return(new DataSet());
            }
            if (where == null)
            {
                where = new List <KeyValue>();
            }

            string reportPath = CReport.GetReportPath();             //报表路径

            if (string.IsNullOrEmpty(reportPath))
            {
                return(new DataSet());
            }
            string sqlCount = "";
            string sql      = CReport.GetSql(reportPath, reportName, where, ref sqlCount, 1);        //获取要查询的SQL语句 及其 参数

            string[] sqlArray = sql.Split('~');
            string   orderBy  = string.Empty;

            if (sqlArray.Length > 1)
            {
                orderBy = sqlArray[1];
            }
            sql = sqlArray[0];

            if (string.IsNullOrEmpty(sql))
            {
                return(new DataSet());
            }
            else
            {
                sql = sql.Trim();
            }
            string conString = CReport.GetConnection();             //获取SQL连接串

            if (string.IsNullOrEmpty(conString))
            {
                return(new DataSet());
            }
            string rowOrder = "";

            if (!string.IsNullOrEmpty(order))
            {
                rowOrder = "order by " + order + "";
            }
            else
            {
                rowOrder = string.IsNullOrEmpty(orderBy) ? "order by (select 0)" : orderBy;
            }
            int start = pageSize * (pageIndex - 1) + 1;
            int end   = pageSize * pageIndex;


            var    matchs   = Regex.Matches(sql, @"\s+order\s+", RegexOptions.IgnoreCase);        //检查语句中是否含有order by
            string strCount = sql;

            if (matchs.Count > 1)
            {
                strCount = sql.Substring(0, matchs[matchs.Count - 1].Index);
                if (string.IsNullOrEmpty(order))
                {
                    rowOrder = sql.Substring(matchs[matchs.Count - 1].Index);
                }
            }
            else if (matchs.Count == 1)
            {
                strCount = sql.Substring(0, matchs[0].Index);
                if (string.IsNullOrEmpty(order))
                {
                    rowOrder = sql.Substring(matchs[0].Index);
                }
            }
            //int firstSelectIndex = Regex.Matches(strCount, @"select", RegexOptions.IgnoreCase)[0].Index + 7;
            //sql = strCount.Insert(firstSelectIndex, " Row_Number() OVER ({0}) row ,");
            //sql = string.Format(sql, rowOrder);

            sql = string.Format(";with cte as (select Row_Number() OVER ({3}) row , * from ({0})item) select * from cte WHERE cte.row BETWEEN {1} AND {2}", sql, start, end, rowOrder);

            if (string.IsNullOrEmpty(sqlCount))
            {
                sqlCount = "select count(0) from (" + strCount + ") item ";
            }


            sql = sql + ";" + sqlCount;
            var Rundate = DateTime.Now;

            //int RunTime = 0;
            using (SqlConnection conn = new SqlConnection(conString))
            {
                SqlCommand cmd = new SqlCommand(sql, conn);
                //where 替换
                foreach (var data in where)
                {
                    cmd.Parameters.Add(new SqlParameter("@" + data.Key, data.Value));
                }
                DataSet ds = new DataSet();

                SqlDataAdapter adp = new SqlDataAdapter(cmd);

                adp.Fill(ds);
                if (ds.Tables.Count > 1)
                {
                    totalCount = Convert.ToInt32(ds.Tables[1].Rows[0][0]);
                }
                else
                {
                    totalCount = 0;
                }

                conn.Close();
                //RunTime = (int)DateTime.Now.Subtract(Rundate).TotalMilliseconds;
                //记录日志
                //if (RunTime > 2000)
                //	Clients.LogClient.AddApplicationStartLogAsync(new U1City.ECDRP.Component.LogServices.ApplicationStartLog() { LogType = 1, Message = reportName, StartTime = DateTime.Now, RunTime = RunTime, SystemID = systemID });
                return(ds);
            }
        }
예제 #4
0
        public static DataSet GetReportData(string reportName, GetReportDataParams param, int systemID, ReportConnectionType type, out int totalCount, bool optimize = false)
        {
            int    pageSize  = param.PageSize;
            int    pageIndex = param.PageIndex;
            string order     = param.Order;

            List <KeyValue> where = param.Where;
            totalCount            = 0;
            if (pageIndex < 1)              //不?能??出?现?索??引?y页?3小?于???1的??情??况?,??否??则??查??询??语??句?报???错???
            {
                pageIndex = 1;
            }
            if (where == null)
            {
                where = new List <KeyValue>();
            }

            string reportPath = CReport.GetReportPath();             //报???表???路??径?

            if (string.IsNullOrEmpty(reportPath))
            {
                return(new DataSet());
            }
            string sql = CReport.GetSql(reportPath, reportName, where);             //获?取??要?a查??询??的??SQL语??句? 及??其? 参?数?y

            if (string.IsNullOrEmpty(sql))
            {
                return(new DataSet());
            }
            else
            {
                sql = sql.Trim();
            }
            string conString = CReport.GetConnection(type);             //获取SQL连接串

            if (string.IsNullOrEmpty(conString))
            {
                return(new DataSet());
            }
            string rowOrder = "";

            if (!string.IsNullOrEmpty(order))
            {
                if (order.ToUpper() == "NEWID()")
                {                 //取??随?机??行D数?y
                    order = "RAND()";
                }

                rowOrder = "order by " + order + "";
            }
            int start = pageSize * (pageIndex - 1);
            //    int end = pageSize * pageIndex;

            var    matchs   = Regex.Matches(sql, @"\s+order\s+", RegexOptions.IgnoreCase);        //检查语句中是否含有order by
            string strCount = sql;

            if (matchs.Count > 1)
            {
                strCount = sql.Substring(0, matchs[matchs.Count - 1].Index);
                if (string.IsNullOrEmpty(order))
                {
                    rowOrder = sql.Substring(matchs[matchs.Count - 1].Index);
                }
            }
            else if (matchs.Count == 1)
            {
                strCount = sql.Substring(0, matchs[0].Index);
                if (string.IsNullOrEmpty(order))
                {
                    rowOrder = sql.Substring(matchs[0].Index);
                }
            }

            sql = string.Format(strCount + " " + rowOrder);
            if (!optimize)             //是否自定义分页
            {
                sql += string.Format(" limit {0},{1}", start, pageSize);
                sql  = sql.Insert(sql.ToLower().IndexOf("select") + 6, " SQL_CALC_FOUND_ROWS ");
                sql  = sql + ";" + "select FOUND_ROWS()";
            }
            else
            {
                sql = sql.Replace("@PagerLimit", string.Format(" limit {0},{1}", start, pageSize));                 //针对特殊的分页,limit不是在sql的最后面的情况
            }

            var Rundate = DateTime.Now;
            int RunTime = 0;

            using (MySqlConnection conn = new MySqlConnection(conString))
            {
                MySqlCommand cmd = new MySqlCommand(sql, conn);
                //where 替??换?
                foreach (var data in where)
                {
                    cmd.Parameters.Add(new MySqlParameter("@" + data.Key, data.Value));
                }
                DataSet          ds  = new DataSet();
                MySqlDataAdapter adp = new MySqlDataAdapter(cmd);
                adp.Fill(ds);
                totalCount = Convert.ToInt32(ds.Tables[1].Rows[0][0]);
                RunTime    = (int)DateTime.Now.Subtract(Rundate).TotalMilliseconds;
                //记录日志
                //if (RunTime > 2000)
                //Clients.LogClient.AddApplicationStartLogAsync(new U1City.ECDRP.Component.LogServices.ApplicationStartLog() { LogType = 1, Message = reportName, StartTime = DateTime.Now, RunTime = RunTime, SystemID = systemID });
                return(ds);
            }
        }