經(jīng)濟(jì)一體化信息管理系統(tǒng)研究
掃描二維碼
隨時隨地手機(jī)看文章
引言
近年來,隨著油田采油廠生產(chǎn)規(guī)模的擴(kuò)大和經(jīng)濟(jì)技術(shù)一體化工作的不斷加深,數(shù)據(jù)的精細(xì)化管理要求越來越高。面對種類繁多的數(shù)據(jù)和報表,傳統(tǒng)的人工加半自動化的管理方法,已經(jīng)跟不上現(xiàn)代化信息管理的步伐。在這種油田信息化發(fā)展的大背景下,基于C/S架構(gòu),以.NET為開發(fā)平臺,同時動態(tài)鏈接Oracle9i數(shù)據(jù)庫的經(jīng)濟(jì)一體化信息管理系統(tǒng)應(yīng)運(yùn)而生。該系統(tǒng)可根據(jù)用戶的權(quán)限,自動顯示其權(quán)限內(nèi)的工作內(nèi)容,并伴有自動計算、查找、統(tǒng)計等功能。本文在分析了用戶需求的基礎(chǔ)上,給出了整個系統(tǒng)的設(shè)計與關(guān)鍵技術(shù)問題的解決方案。
1需求分析
由于油田下設(shè)單位眾多,在生產(chǎn)管理上,有的單位還未建立統(tǒng)一實(shí)物消耗統(tǒng)計管理系統(tǒng),數(shù)據(jù)采集方式多、來源廣、差異大,不能形成系統(tǒng)的歷史數(shù)據(jù)沉淀,沒有形成完善的統(tǒng)計管理工作責(zé)任體系,因此,目前亟需一套管理系統(tǒng)來達(dá)到如下需求。
錄入人員、審核人員和管理員登錄時,系統(tǒng)會根據(jù)其所屬單位及權(quán)限,自動顯示其權(quán)限內(nèi)需要錄入、審核或查詢的報表。
審核人員對錄入人員錄入的數(shù)據(jù)進(jìn)行審核,以保證數(shù)據(jù)真實(shí)、可靠后,由后臺發(fā)布平臺自動計算生成管理報表供查詢?nèi)藛T進(jìn)行查閱,查詢?nèi)藛T只能查看到自己權(quán)限下的管理報表。
后臺管理人員可進(jìn)行用戶管理、下設(shè)單位關(guān)系的維護(hù)以及后臺價格庫的維護(hù)等后臺操作。
根據(jù)對庫存量和消耗量的統(tǒng)計,自動實(shí)現(xiàn)各級單位實(shí)物工作量的動態(tài)管理和便捷查詢,能夠及時了解各單位材料(燃料)的消耗、庫存及下一步需求等情況,為物料管理提供參考。
2系統(tǒng)設(shè)計
針對客戶需求和油田經(jīng)濟(jì)一體化管理系統(tǒng)的特點(diǎn),本系統(tǒng)采用.NET多層架構(gòu)技術(shù),運(yùn)用WinForm等開發(fā)工具,以O(shè)racle9i數(shù)據(jù)庫為基礎(chǔ)來進(jìn)行開發(fā)。
Microsoft.NET技術(shù)是最新的數(shù)據(jù)庫應(yīng)用開發(fā)工具,可以高效地開發(fā)可靠、穩(wěn)定又安全的各類數(shù)據(jù)庫應(yīng)用程序。系統(tǒng)的客戶端就是采用.NET開發(fā)平臺中的WindowsForm(簡稱
winform)來創(chuàng)建應(yīng)用程序的用戶界面,并可以創(chuàng)建豐富的窗體和可視化空間,以達(dá)到界面美觀、友好的效果。開發(fā)工具運(yùn)用MicrosoftVisualStudio2008,并使用.NET支持的C#開發(fā)語言進(jìn)行軟件的開發(fā),確保系統(tǒng)數(shù)據(jù)的實(shí)時性、穩(wěn)定性、安全性。
油田的生產(chǎn)管理過程中有大量的數(shù)據(jù)需要同時、快速的進(jìn)行存儲和讀取,后臺數(shù)據(jù)庫需要強(qiáng)大的Oracle9i數(shù)據(jù)庫進(jìn)行鏈接。Oracle9i由兩個產(chǎn)品構(gòu)成:一個是Oracle9i數(shù)據(jù)庫,它集成了集群的功能;另一個是Oracle9i應(yīng)用服務(wù)器,它集成了高速緩存融合的技術(shù)。這兩個產(chǎn)品合起來,就能給企業(yè)提供一種高可伸縮性、高可靠性和高性能的應(yīng)用。
經(jīng)濟(jì)一體化管理系統(tǒng)由錄入系統(tǒng)、審核系統(tǒng)、查詢和后臺管理系統(tǒng)等分系統(tǒng)組成。圖1所示是本系統(tǒng)的組成圖。
圖1 經(jīng)濟(jì)一體化管理系統(tǒng)構(gòu)成
用戶登錄系統(tǒng)時,可以根據(jù)用戶注冊時所分配的權(quán)限分別進(jìn)入錄入系統(tǒng)、審核系統(tǒng)、查詢系統(tǒng)和后臺管理系統(tǒng)。
在錄入系統(tǒng),錄入人員通過本系統(tǒng)可將數(shù)據(jù)錄入其權(quán)限內(nèi)的報表中。數(shù)據(jù)錄入、修改完畢后,單擊右下角的'保存”按鈕,即可完成報表的錄入或修改。已審核的報表,“保存”按鈕為灰色,數(shù)據(jù)無法更改。
在審核系統(tǒng),審核人員通過本系統(tǒng)審核其權(quán)限內(nèi)的報表,在確保數(shù)據(jù)的可靠、完整后,單擊右下角的“審核”按鈕,即可完成報表的審核。已審核的報表,“審核”按鈕為灰色,不可點(diǎn)擊。
通過查詢系統(tǒng),用戶可通過本系統(tǒng)查閱其權(quán)限內(nèi)的所有報表??刹樵兊膱蟊矸譃榫C合管理報表和條件查詢報表。兩種報表都可以通過選擇月份進(jìn)行跨月累計查詢以及Excel導(dǎo)出功能,同時綜合管理報表可以點(diǎn)擊右鍵進(jìn)行線狀/柱狀/餅狀的圖形分析,條件查詢報表可通過點(diǎn)擊下屬單位進(jìn)行多級追蹤查詢。
在后臺管理系統(tǒng),后臺管理人員可通過本系統(tǒng)對整個系統(tǒng)進(jìn)行后臺維護(hù)。主要功能有數(shù)據(jù)發(fā)布、用戶管理、下設(shè)單位關(guān)系維護(hù)、后臺價格庫維護(hù)、單井/爐維護(hù)等。其中,數(shù)據(jù)發(fā)布就是對程序控制執(zhí)行存儲過程生成管理報表;用戶管理主要是增刪用戶或更改用戶具體的工作內(nèi)容和權(quán)限;下設(shè)單位關(guān)系維護(hù)是增刪下設(shè)單位,以適應(yīng)油田的長期發(fā)展;后臺價格庫維護(hù)就是定時對生產(chǎn)投入的物料價格進(jìn)行實(shí)時更新,以實(shí)現(xiàn)量價分離的管理目標(biāo);單井/爐維護(hù)是增刪井/爐以及對井/爐的屬性進(jìn)行修改。
3關(guān)鍵問題及解決方案
3.1.Net與Oracle的鏈接
.Net與Oracle數(shù)據(jù)庫可以通過多種方法來實(shí)現(xiàn)鏈接,既可以通過使用ODBC或OLEDB標(biāo)準(zhǔn)接口對數(shù)據(jù)庫進(jìn)行鏈接,也可以通過.Net框架提供的專用接口System.Data.OracleClient.dll組件(ADO.Net組件)進(jìn)行鏈接。這款組件是微軟專門針對Oracle數(shù)據(jù)庫開發(fā)而設(shè)計的,具有速度快、性能好的特點(diǎn),是值得推薦使用的方式。
建立鏈接需要首先添加Sytem.Data.OracleClien命名空間,將System.Data.OracleClient.dll加入到項目中,接下來就可以創(chuàng)建和數(shù)據(jù)庫的鏈接了。建立鏈接的主要代碼如下:
添加命名空間:
usingSystem.Data.OracleClient;
創(chuàng)建和數(shù)據(jù)庫的鏈接:
OracleConnectionconn=
NewOracleConnection("datasource=remotedb;UserId=scott;Password=scott;");
//其中remotedb為oracle客戶端tnsnames.ora配置文件中的網(wǎng)絡(luò)服務(wù)名
下面是新建一個對數(shù)據(jù)庫操作的實(shí)例:
OracleCommandoraCmd=newOracleCommand("select*fromuser",conn);
OracleDataReaderoraRD=oraCmd.ExecuteReader();
//DataReader提供一種從數(shù)據(jù)庫讀取行的只進(jìn)流的方式打開數(shù)據(jù)庫鏈接:
try{
conn.Open();
if(odr.Read())
{…}
Conn.close();
catch
{…}
3.2多線程與委托的運(yùn)用
后臺管理系統(tǒng)的發(fā)布功能需要程序按一定順序調(diào)用執(zhí)行后臺所有的存儲過程,在此過程中需要執(zhí)行數(shù)百個存儲過程,并且每個存儲過程涉及的數(shù)據(jù)量也非常大,因而可能會導(dǎo)致發(fā)布窗體經(jīng)常出現(xiàn)假死狀態(tài)。這是由于系統(tǒng)在進(jìn)行大量運(yùn)算時,為了避免主線程界面這種假死狀態(tài),需要使用另一個線程來控制。
多線程的應(yīng)用可以使程序同時完成多個任務(wù),可以讓占用大量處理時間的任務(wù)定期將處理時間讓給別的任務(wù)使用。因此,可以創(chuàng)建一個新的線程來執(zhí)行發(fā)布功能,從而防止主線程界面假死。
在.Net中,可用如下代碼來創(chuàng)建并啟動一個新的線程:
ThreadRun_Pro_Two=newThread(newThreadStart(Run));Run_Pro_Two.IsBackground=true;
Run_Pro_Two.Start();
但是,在很多時候,新的線程中需要與UI進(jìn)行交互,而在.Net中不允許直接這樣做,因為Windows窗體基于本機(jī)Win32窗口,而Win32窗口從本質(zhì)上而言是單元線程。STA模型意味著可以在任何線程上創(chuàng)建窗口,但窗口一旦創(chuàng)建后就不能切換線程,并且對它的所有函數(shù)調(diào)用都必須在其創(chuàng)建線程上發(fā)生。STA模型要求,從控件的非創(chuàng)建線程調(diào)用控件上的任何方法都必須被封送到(在其上執(zhí)行)該控件的創(chuàng)建線程?;怌ontrol為此目的提供了若干方法(Invoke、BeginInvoke和Endlnvoke)。
Invoke生成同步方法調(diào)用時,如果從另一個線程調(diào)用控件方法,則必須使用控件的一個Invoke方法來將調(diào)用封送到適當(dāng)?shù)木€程。Invoke調(diào)用方法分為兩步:第一步是定義與函數(shù)功能對應(yīng)的委托;第二步是將參數(shù)以及函數(shù)名通過委托實(shí)例傳遞給Invoke。
調(diào)用方法如下:
privatedelegatevoidInvokeDelegate_2(inti,intj,Exceptione);
//定義一個函數(shù)的委托
privatevoidInvoke_Datagridview_2(inti,intj,Exceptione)//定義函數(shù)
}
在主線程中調(diào)用:
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();
通過應(yīng)用多線程和委托方法可有效防止發(fā)布數(shù)據(jù)窗口假死的現(xiàn)象。
4結(jié)語
結(jié)合.Net和Oracle數(shù)據(jù)庫開發(fā)的信息管理系統(tǒng),操作界面友好,用戶操作簡明、快捷,系統(tǒng)運(yùn)行穩(wěn)定,并能夠?qū)崿F(xiàn)信息的實(shí)時查詢和處理。目前,本文設(shè)計的系統(tǒng)已經(jīng)投入運(yùn)行,并取得了較好的經(jīng)濟(jì)社會效果。
20211018_616c5dbce0856__經(jīng)濟(jì)一體化信息管理系統(tǒng)研究