经济一体化信息管理系统研究
扫描二维码
随时随地手机看文章
引言
近年来,随着油田采油厂生产规模的扩大和经济技术一体化工作的不断加深,数据的精细化管理要求越来越高。面对种类繁多的数据和报表,传统的人工加半自动化的管理方法,已经跟不上现代化信息管理的步伐。在这种油田信息化发展的大背景下,基于C/S架构,以.NET为开发平台,同时动态链接Oracle9i数据库的经济一体化信息管理系统应运而生。该系统可根据用户的权限,自动显示其权限内的工作内容,并伴有自动计算、查找、统计等功能。本文在分析了用户需求的基础上,给出了整个系统的设计与关键技术问题的解决方案。
1需求分析
由于油田下设单位众多,在生产管理上,有的单位还未建立统一实物消耗统计管理系统,数据采集方式多、来源广、差异大,不能形成系统的历史数据沉淀,没有形成完善的统计管理工作责任体系,因此,目前亟需一套管理系统来达到如下需求。
录入人员、审核人员和管理员登录时,系统会根据其所属单位及权限,自动显示其权限内需要录入、审核或查询的报表。
审核人员对录入人员录入的数据进行审核,以保证数据真实、可靠后,由后台发布平台自动计算生成管理报表供查询人员进行查阅,查询人员只能查看到自己权限下的管理报表。
后台管理人员可进行用户管理、下设单位关系的维护以及后台价格库的维护等后台操作。
根据对库存量和消耗量的统计,自动实现各级单位实物工作量的动态管理和便捷查询,能够及时了解各单位材料(燃料)的消耗、库存及下一步需求等情况,为物料管理提供参考。
2系统设计
针对客户需求和油田经济一体化管理系统的特点,本系统采用.NET多层架构技术,运用WinForm等开发工具,以Oracle9i数据库为基础来进行开发。
Microsoft.NET技术是最新的数据库应用开发工具,可以高效地开发可靠、稳定又安全的各类数据库应用程序。系统的客户端就是采用.NET开发平台中的WindowsForm(简称
winform)来创建应用程序的用户界面,并可以创建丰富的窗体和可视化空间,以达到界面美观、友好的效果。开发工具运用MicrosoftVisualStudio2008,并使用.NET支持的C#开发语言进行软件的开发,确保系统数据的实时性、稳定性、安全性。
油田的生产管理过程中有大量的数据需要同时、快速的进行存储和读取,后台数据库需要强大的Oracle9i数据库进行链接。Oracle9i由两个产品构成:一个是Oracle9i数据库,它集成了集群的功能;另一个是Oracle9i应用服务器,它集成了高速缓存融合的技术。这两个产品合起来,就能给企业提供一种高可伸缩性、高可靠性和高性能的应用。
经济一体化管理系统由录入系统、审核系统、查询和后台管理系统等分系统组成。图1所示是本系统的组成图。
图1 经济一体化管理系统构成
用户登录系统时,可以根据用户注册时所分配的权限分别进入录入系统、审核系统、查询系统和后台管理系统。
在录入系统,录入人员通过本系统可将数据录入其权限内的报表中。数据录入、修改完毕后,单击右下角的'保存”按钮,即可完成报表的录入或修改。已审核的报表,“保存”按钮为灰色,数据无法更改。
在审核系统,审核人员通过本系统审核其权限内的报表,在确保数据的可靠、完整后,单击右下角的“审核”按钮,即可完成报表的审核。已审核的报表,“审核”按钮为灰色,不可点击。
通过查询系统,用户可通过本系统查阅其权限内的所有报表。可查询的报表分为综合管理报表和条件查询报表。两种报表都可以通过选择月份进行跨月累计查询以及Excel导出功能,同时综合管理报表可以点击右键进行线状/柱状/饼状的图形分析,条件查询报表可通过点击下属单位进行多级追踪查询。
在后台管理系统,后台管理人员可通过本系统对整个系统进行后台维护。主要功能有数据发布、用户管理、下设单位关系维护、后台价格库维护、单井/炉维护等。其中,数据发布就是对程序控制执行存储过程生成管理报表;用户管理主要是增删用户或更改用户具体的工作内容和权限;下设单位关系维护是增删下设单位,以适应油田的长期发展;后台价格库维护就是定时对生产投入的物料价格进行实时更新,以实现量价分离的管理目标;单井/炉维护是增删井/炉以及对井/炉的属性进行修改。
3关键问题及解决方案
3.1.Net与Oracle的链接
.Net与Oracle数据库可以通过多种方法来实现链接,既可以通过使用ODBC或OLEDB标准接口对数据库进行链接,也可以通过.Net框架提供的专用接口System.Data.OracleClient.dll组件(ADO.Net组件)进行链接。这款组件是微软专门针对Oracle数据库开发而设计的,具有速度快、性能好的特点,是值得推荐使用的方式。
建立链接需要首先添加Sytem.Data.OracleClien命名空间,将System.Data.OracleClient.dll加入到项目中,接下来就可以创建和数据库的链接了。建立链接的主要代码如下:
添加命名空间:
usingSystem.Data.OracleClient;
创建和数据库的链接:
OracleConnectionconn=
NewOracleConnection("datasource=remotedb;UserId=scott;Password=scott;");
//其中remotedb为oracle客户端tnsnames.ora配置文件中的网络服务名
下面是新建一个对数据库操作的实例:
OracleCommandoraCmd=newOracleCommand("select*fromuser",conn);
OracleDataReaderoraRD=oraCmd.ExecuteReader();
//DataReader提供一种从数据库读取行的只进流的方式打开数据库链接:
try{
conn.Open();
if(odr.Read())
{…}
Conn.close();
catch
{…}
3.2多线程与委托的运用
后台管理系统的发布功能需要程序按一定顺序调用执行后台所有的存储过程,在此过程中需要执行数百个存储过程,并且每个存储过程涉及的数据量也非常大,因而可能会导致发布窗体经常出现假死状态。这是由于系统在进行大量运算时,为了避免主线程界面这种假死状态,需要使用另一个线程来控制。
多线程的应用可以使程序同时完成多个任务,可以让占用大量处理时间的任务定期将处理时间让给别的任务使用。因此,可以创建一个新的线程来执行发布功能,从而防止主线程界面假死。
在.Net中,可用如下代码来创建并启动一个新的线程:
ThreadRun_Pro_Two=newThread(newThreadStart(Run));Run_Pro_Two.IsBackground=true;
Run_Pro_Two.Start();
但是,在很多时候,新的线程中需要与UI进行交互,而在.Net中不允许直接这样做,因为Windows窗体基于本机Win32窗口,而Win32窗口从本质上而言是单元线程。STA模型意味着可以在任何线程上创建窗口,但窗口一旦创建后就不能切换线程,并且对它的所有函数调用都必须在其创建线程上发生。STA模型要求,从控件的非创建线程调用控件上的任何方法都必须被封送到(在其上执行)该控件的创建线程。基类Control为此目的提供了若干方法(Invoke、BeginInvoke和Endlnvoke)。
Invoke生成同步方法调用时,如果从另一个线程调用控件方法,则必须使用控件的一个Invoke方法来将调用封送到适当的线程。Invoke调用方法分为两步:第一步是定义与函数功能对应的委托;第二步是将参数以及函数名通过委托实例传递给Invoke。
调用方法如下:
privatedelegatevoidInvokeDelegate_2(inti,intj,Exceptione);
//定义一个函数的委托
privatevoidInvoke_Datagridview_2(inti,intj,Exceptione)//定义函数
}
在主线程中调用:
this.Invoke(newInvokeDelegate_2(Invoke_Datagridview_2),newobject[]{i_one,j_one,ex});
//i_one,j_one,ex为主线程中的变量
最后在主线程中,终止线程:
if(Run_Pro_Two.IsAlive)Run_Pro_Two.Abort();
通过应用多线程和委托方法可有效防止发布数据窗口假死的现象。
4结语
结合.Net和Oracle数据库开发的信息管理系统,操作界面友好,用户操作简明、快捷,系统运行稳定,并能够实现信息的实时查询和处理。目前,本文设计的系统已经投入运行,并取得了较好的经济社会效果。
20211018_616c5dbce0856__经济一体化信息管理系统研究