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格式
声明:除非特别标注,否则均为本站原创文章,转载时请以链接形式注明文章出处。如若本站内容侵犯了原著者的合法权益,可联系本站删除。
上一篇
已经是第一篇



