电脑桌面
添加蚂蚁七词文库到电脑桌面
安装后可以在桌面快捷访问

BOS账表查询,使用多线程,提升报表查询速度

来源:金蝶云社区作者:金蝶2024-09-161

BOS账表查询,使用多线程,提升报表查询速度

using Kingdee.BOS;
using Kingdee.BOS.Log;
using Kingdee.BOS.ServiceHelper;
using Kingdee.K3.FIN.App.Core;
using System;
using System.Collections.Generic;
using System.Threading.Tasks;

namespace HANS.SupplierSupplyRatio
{
    internal class MutiThreadQry
    {

        public static void MTQry(Context context)
        {
            var strCountSQL = "/*dialect*/ select count(*) from T_SAL_ORDERENTRY";
            long defaultValue = 0L;
            List<SqlParam> listSqlParam = new List<SqlParam>();
            var totalRecord = DBServiceHelper.ExecuteScalar<long>(context, strCountSQL, defaultValue, listSqlParam.ToArray());

            /*总记录数:totalRecord:333706
             *每页最大记录数:pageSize:10000
             *totalPage = (totalRecord + pageSize-1) / pageSize;
             *其中 pageSize-1 就是 totalRecord / pageSize 的最大的余数
             */

            long pageSize = 10000L;
            long totalPage = 0L;
            if (totalRecord > 0L)
            {
                //D:\WorkSpace\SZLS\HANS_CLOUD\K3Cloud\BIN\Kingdee.K3.FIN.App.Core.dll
                string targetTableName = CommonFunction.GetTempTableName(context);
                DBServiceHelper.Execute(context, string.Format(@"/*dialect*/ create table {0} as select * from T_SAL_ORDERENTRY where 1=2", targetTableName));
                List<Task> mTask = new List<Task>();
                totalPage = (totalRecord + pageSize - 1L) / pageSize;
                for (long i = 1L; i <= totalPage; i++)
                {
                    long startPageIndex = (i - 1L) * pageSize;
                    long endPageIndex = i * pageSize;
                    var task = Task.Factory.StartNew(() =>
                    {
                        Write(context, targetTableName, startPageIndex, endPageIndex);
                    });
                    mTask.Add(task);
                }

                try
                {
                    Task.WaitAll(mTask.ToArray());
                }
                catch (AggregateException ex)
                {
                    Logger.Error("HANS.SupplierSupplyRatio.MTQry", "多线程运行产生异常!", ex);
                }

                CommonFunction.DropTempTable(context, targetTableName, true);
            }
        }

        static void Write(Context context, string targetTableName, long startPageIndex, long endPageIndex)
        {

            var strInsertSQL = string.Format(@"/*dialect*/ 
                                                INSERT /*+ parallel(4) */ INTO  {0}
                                                (
                                                {3}
                                                )
                                                select tmp.*
                                                from (
                                                 SELECT 
                                                 {3}
                                                 FROM (
                                                        SELECT t.*, ROWNUM AS rowno
                                                        FROM (    
					                                           T_SAL_ORDERENTRY
			                                                  ) t
                                                            WHERE ROWNUM <= {2}
                                                     ) t2
                                                 WHERE t2.rowno > {1}
                                                ) tmp
                                                ", targetTableName, startPageIndex, endPageIndex, strFields);

  

BOS账表查询,使用多线程,提升报表查询速度

using Kingdee.BOS;using Kingdee.BOS.Log;using Kingdee.BOS.ServiceHelper;using Kingdee.K3.FIN.App.Core;using System;using System.Co...
点击下载文档文档为doc格式

声明:除非特别标注,否则均为本站原创文章,转载时请以链接形式注明文章出处。如若本站内容侵犯了原著者的合法权益,可联系本站删除。

已经是第一篇
确认删除?
回到顶部
客服QQ
  • 客服QQ点击这里给我发消息
QQ群
  • 答案:my7c点击这里加入QQ群
支持邮箱
微信
  • 微信