前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >基于Flowportal.Net写自己的应用时使用SqlDataReader遇到的一个问题

基于Flowportal.Net写自己的应用时使用SqlDataReader遇到的一个问题

作者头像
崔文远TroyCui
发布2019-02-27 10:08:45
5870
发布2019-02-27 10:08:45
举报
文章被收录于专栏:远在上海远在上海

在使用Flowportal.Net BPM的时候,因为一个特殊的步骤需要自动根据ERP中的订单状态自动审批,在设计流程的时候,把这个步骤设定为2个处理人的共享任务。其中一个是专门设定的一个系统账号。然后,我创建了一个Winform的程序,自动执行以下的代码:先从BPM数据库中读取出来未处理的当前流程、当前步骤的清单,接着循环判断而去使用单独创建的用户登录到BPM取得共享任务并审批通过,当然了如果判断ERP系统未处理的话,就把只把当前任务取下来作为系统账号的个人任务。 程序的逻辑很清楚了,但是忽略了一个问题,在从BPM数据库读取数据的时候,偷懒是用了SqlDataReader,造成在循环内的BPM更新一直超时。后改为Dataset之后,问题解决。原因是SqlDataReader是读取完毕所有的查询结果后才断开数据库连接,所以在循环内部就会出现已经存在一个数据库连接,造成新建连接冲突。改为Dataset之后,就可以把结果放入Dataset(服务器的内存里),然后关闭对数据库的连接了,这时候那个逐行的循环更新就不会有问题了。

代码语言:javascript
复制
       private void RMA_WarehouseRC_AutoPickupAndApprove()
       {
           GlobalFunction gf = new GlobalFunction();
           //Sql - Get the BPM Request list
           string strsql = "SELECT *";
           strsql += " FROM dbo.BPMInstProcSteps";
           strsql += " where ProcessName = N'RMA' and NodeName = N'Warehouse RC' and FinishAt is null";
           //Share Task
           strsql += " and Share=1";
           //Not Picked up
           strsql += " and OwnerAccount is Null";
           strsql += " Order by TaskID Asc";
           //Search the BPMDB
           SqlConnection connBPMDB = new SqlConnection(ConfigurationManager.ConnectionStrings["BPMDBConnectionString"].ConnectionString);
           SqlCommand mycmd = new SqlCommand(strsql, connBPMDB);
           mycmd.CommandType = CommandType.Text;
           connBPMDB.Open();
           //SqlDataReader drtemp = mycmd.ExecuteReader();
           SqlDataAdapter da = new SqlDataAdapter();
           DataSet ds = new DataSet();
           da.SelectCommand = mycmd;
           da.Fill(ds);
           DataTable dt = new DataTable();
           dt = ds.Tables[0];
           connBPMDB.Close();
           for (int i = 0; i < dt.Rows.Count; i++)
           {
               //Get the Warehouse Receivied Status from ERP LN
               //This update using MSSQL job to update the data
               //Database: WAIBPM 
               //Table: FormRMA
               //Data field: WarehouseReceived
               //Pickup and approve
               if (gf.testread("Select ID from FormRMA where WarehouseReceived = N'Yes' and TaskID= " + Convert.ToInt32(dt.Rows[i]["TaskID"]) + ""))
               {
                   PickupShareTaskandApprove(Convert.ToInt32(dt.Rows[i]["StepID"]));
               }
               //Pickup only
               else
               {
                   PickupShareTask(Convert.ToInt32(dt.Rows[i]["StepID"]));
               }
           }
       }
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2011年12月23日,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
访问管理
访问管理(Cloud Access Management,CAM)可以帮助您安全、便捷地管理对腾讯云服务和资源的访问。您可以使用CAM创建子用户、用户组和角色,并通过策略控制其访问范围。CAM支持用户和角色SSO能力,您可以根据具体管理场景针对性设置企业内用户和腾讯云的互通能力。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档