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