范 燕 王啟超 王科偉
(1.常州信息職業(yè)技術(shù)學(xué)院電子與電氣工程學(xué)院 江蘇常州 213164;2.南京工業(yè)大學(xué)交通學(xué)院 江蘇南京 210009;3.江蘇緯信工程咨詢有限公司 江蘇南京 210029)
隨著我國進(jìn)入全面建成小康社會階段,城市化及新農(nóng)村建設(shè)進(jìn)程加快。在此過程中,農(nóng)村公路基礎(chǔ)數(shù)據(jù)信息化存儲及統(tǒng)一管理是必經(jīng)之路。交通信息是智能交通系統(tǒng)(ITS)中多個子系統(tǒng)的基礎(chǔ)[1]。其中,相比于動態(tài)交通流信息,靜態(tài)道路交通基礎(chǔ)設(shè)施信息具有調(diào)查周期長、更新難度大的特點。Garda和Weston描述了城市道路與公路信息統(tǒng)一化管理的優(yōu)勢,研究了歐洲在相關(guān)方面的政策,并探討相關(guān)方法如何在波斯灣各國進(jìn)行應(yīng)用。李興林[2]在對系統(tǒng)建設(shè)需求、服務(wù)對象、信息需求進(jìn)行分析后,提出公路信息處理子系統(tǒng)應(yīng)能夠從信息采集子系統(tǒng)中提取有效數(shù)據(jù)信息。數(shù)據(jù)處理平臺能對數(shù)據(jù)庫中信息進(jìn)行加工處理。
相關(guān)公共數(shù)據(jù)服務(wù)系統(tǒng)[1,3-5]的設(shè)計已比較完善,但對于基礎(chǔ)信息修改方面,沒有考慮到大量信息修改時人工操作錯誤率的提高?;诖耍疚尼槍r(nóng)路基礎(chǔ)信息管理系統(tǒng)(e-Road),采用C#語言,提出農(nóng)路基礎(chǔ)信息批量處理的方法,可以降低操作員的工作強度,提高修改的準(zhǔn)確性,具有更低的花費和更高的實用價值。
農(nóng)路基礎(chǔ)數(shù)據(jù)更新系統(tǒng)(以下簡稱e-Road)是對農(nóng)路基礎(chǔ)信息進(jìn)行采集與管理的平臺N包括內(nèi)業(yè)處理子系統(tǒng)和外業(yè)采集子系統(tǒng)。
在e-road中農(nóng)村公路基礎(chǔ)信息通過Access數(shù)據(jù)庫存儲為mdb格式文件。其中包括有橋梁表、路段表、對應(yīng)編碼表等數(shù)據(jù)表。路橋等覆蓋物的圖形信息以二進(jìn)制格式存儲于數(shù)據(jù)庫相應(yīng)字段中,屬性信息存儲于其他字段中。其中橋梁編碼、路段編碼為路橋信息中每條記錄的唯一編碼。為節(jié)約存儲空間,提高存儲效率,將有限值域變量使用數(shù)字編碼存儲。變量的所有可取值及其對應(yīng)的編碼記錄在一張表中。
e-Road具有良好的數(shù)據(jù)采集與處理能力,但在短時間內(nèi)處理大量數(shù)據(jù)時,仍需要大量人工參與,無法進(jìn)行批量處理。人工參與處理的效率相對低下,且錯誤率較高。
C#語言是.NET框架的標(biāo)準(zhǔn)語言,由微軟于2002年提出。作為一種完全面向?qū)ο蟮恼Z言,2013年在TIOBE編程語言排名第5位。C#采用C語言的語法結(jié)構(gòu),具有可視化的組件式開發(fā)能力。相比于C++,其面向?qū)ο蟮奶匦愿油怀?,且弱化了指針的使用,使開發(fā)的過程更為簡單,開發(fā)的程序更為安全。但是,由于使用C#開發(fā)的程序是以字節(jié)碼的形式存儲,代碼的安全性較低;由于其運行于.NET framework運行時上,代碼執(zhí)行效率相比于C/C++較低。
雖然C#程序執(zhí)行效率較低,但由于本方法并不要求程序具有實時性,故足以滿足本方法的要求。其完全面向?qū)ο蟮奶匦?,使得開發(fā)人員可以以更貼近人的思維進(jìn)行程序開發(fā)。
ADO.NET的名稱起源于 ADO(ActiveX Data Objects)是.NET框架中的一組類庫,用于在基于.NET的應(yīng)用程序的數(shù)據(jù)之間進(jìn)行通信。在使用.NET框架開發(fā)的數(shù)據(jù)庫管理應(yīng)用程序中,ADO.NET是常用的連接數(shù)據(jù)源、執(zhí)行數(shù)據(jù)命令、提交查詢和處理結(jié)果的類庫??梢灾苯犹幚頇z索到的結(jié)果或者將處理結(jié)果放入到ADO.NET的數(shù)據(jù)集中,并可以將來自不同數(shù)據(jù)源的數(shù)據(jù)或在層之間進(jìn)行遠(yuǎn)程處理的數(shù)據(jù)組合在一起使用。其中連接數(shù)據(jù)源的類為Connection類,數(shù)據(jù)操作的類有Command、DataReader、DataAdapter,用于存儲數(shù)據(jù)的 DataTabel和 Data-Set。ADO.NET利用數(shù)據(jù)提供程序進(jìn)行數(shù)據(jù)庫聯(lián)接與訪問,通過ADO.NET配合SQL語句可以訪問所有通過ODBC或OLEDB接口訪問的數(shù)據(jù)庫,如Access、dBase、SQLServer、Oracle 等。
在本文提出的方法中,由于數(shù)據(jù)的人工修改部分是在更為通用的excel中完成,不需要涉及到數(shù)據(jù)集(dataset),所以使用Command進(jìn)行數(shù)據(jù)的修改。批量操作過程通過業(yè)務(wù)層進(jìn)行。
三層架構(gòu)是目前較為流行的架構(gòu)思想,具有良好的可拓展性。三層架構(gòu)一般是指表示層、業(yè)務(wù)層、數(shù)據(jù)層,如圖1。
圖1 三層結(jié)構(gòu)基本模型
表示層是應(yīng)用的用戶接口部分(用戶界面),提高了軟件的可操作性,對用戶提供友好的人機交互界面。為使用戶能直觀地進(jìn)行操作,一般使用圖形用戶接口(GUI);業(yè)務(wù)層(中間層)是整個應(yīng)用系統(tǒng)的核心,體現(xiàn)了整個系統(tǒng)的功能。這一層不用考慮具體的數(shù)據(jù)庫操作與表現(xiàn)形式,只需考慮功能的實現(xiàn);數(shù)據(jù)層負(fù)責(zé)數(shù)據(jù)信息的存儲、訪問及優(yōu)化。數(shù)據(jù)庫管理系統(tǒng)必須能迅速執(zhí)行大量數(shù)據(jù)的更新和檢索。目前主要是關(guān)系數(shù)據(jù)庫管理系統(tǒng)(RDBMS)[4]。
在開發(fā)基于ADO.NET的數(shù)據(jù)庫程序時,應(yīng)用.Net框架良好的面向?qū)ο蟮奶匦?,可以快速地開發(fā)出具有良好可拓展性與魯棒性的應(yīng)用程序。
程序的編寫在江蘇省農(nóng)村公路提檔升級項目過程中進(jìn)行。需要隨時對程序進(jìn)行修改以適應(yīng)新的需求。為方便程序的修改及后期移植,采用三層架構(gòu)進(jìn)行編寫。以Microsoft Visual 2010為開發(fā)工具,以Microsoft Access作為數(shù)據(jù)庫平臺完成軟件的編寫。
程序為桌面程序,其架構(gòu)分為3層:數(shù)據(jù)層、業(yè)務(wù)層和界面層。界面層面向用戶提供圖形界面及用戶級別操作功能,如圖2所示。
圖2 程序界面
為提高操作效率,采用極簡設(shè)計。界面分為輸入?yún)^(qū)和功能按鈕區(qū)。輸入?yún)^(qū)為一個多行文本框;功能按鈕區(qū)為實現(xiàn)軟件功能的功能按鈕。業(yè)務(wù)層,接收界面層的命令,解釋之后傳遞給數(shù)據(jù)層。由于此程序沒有返回數(shù)據(jù)庫的數(shù)據(jù),不需將數(shù)據(jù)層的數(shù)據(jù)傳輸給界面層。數(shù)據(jù)層只對數(shù)據(jù)庫進(jìn)行操作,如拼接SQL語句,執(zhí)行操作。
根據(jù)現(xiàn)階段的需要,程序需滿足兩種功能:①選擇需要操作的項目庫數(shù)據(jù)庫文件;②修改需要更新的數(shù)據(jù);③刪除審查單位審查不通過的數(shù)據(jù)。
選擇數(shù)據(jù)庫文件操作應(yīng)簡單易用,使用人機交互界面進(jìn)行。可以使用windows選擇文件對話框控件進(jìn)行。
修改數(shù)據(jù)功能要實現(xiàn)向程序輸入待修改記錄的唯一編號集,需修改的字段,修改后的值。程序能夠自動批量對各條記錄進(jìn)行更新。
刪除數(shù)據(jù)功能要實現(xiàn)向程序輸入待刪除記錄的唯一編號集,根據(jù)編號集格式化規(guī)則解析出各條待刪除記錄并進(jìn)行刪除。
以江蘇省農(nóng)村公路提檔升級項目中的大豐市橋梁項目為例,根據(jù)需求需要刪除的數(shù)據(jù)有230條。
將返回表格與原始表格進(jìn)行對比。在excel中,使用vlookup函數(shù)查詢返回表格中的橋梁編號在原始表中對應(yīng)的其他任一字段。篩選出結(jié)果為#N/A的記錄,即為項目庫中需要刪除的記錄。
將篩選出的需要刪除的記錄的橋梁編碼記錄下來,使用逗號隔開各條記錄。將剩下的記錄的橋梁編碼、各需要修改的字段使用逗號隔開,將各條記錄之間用分號隔開。
點擊load按鈕,選擇需要操作的數(shù)據(jù)庫。彈出“ok!”表示連接數(shù)據(jù)庫成功。將格式化好的需要刪除的橋梁編碼粘貼到輸入?yún)^(qū)中,點擊delete按鈕。彈出“ok!”表示數(shù)據(jù)刪除成功。清空文本框,將格式化好的剩下的記錄粘貼于此。點擊modify按鈕。彈出“ok!”表示數(shù)據(jù)修改成功。如果數(shù)據(jù)處理不成功,應(yīng)檢查數(shù)據(jù)格式化是否正確。
經(jīng)本實例驗證,采用傳統(tǒng)方法人工進(jìn)行數(shù)據(jù)操作,需要花費一天時間;而采用ADO.NET的信息批量處理方法,只需要不到10分鐘,且保證了正確率、易于修改。
傳統(tǒng)方法使用e-Road系統(tǒng)對數(shù)據(jù)進(jìn)行逐條更新,效率低下且準(zhǔn)確度無法保障。筆者對e-road數(shù)據(jù)庫進(jìn)行分析,使用C#語言編寫基于ADO.NET的數(shù)據(jù)庫程序。程序使用三層架構(gòu)以方便升級。經(jīng)實踐證明,相比于傳統(tǒng)方法,大大提高了項目數(shù)據(jù)整理效率。
桌面程序雖然可以完成現(xiàn)階段的需求,但當(dāng)對同一個數(shù)據(jù)庫文件進(jìn)行大量不可簡化的操作時,無法進(jìn)行多人的協(xié)同工作。隨著工作效率的提高、工作量的增大,B/S結(jié)構(gòu)的程序?qū)⒅饾u顯示其優(yōu)越性。三層架構(gòu)的設(shè)計使得程序可以方便地移植為B/S結(jié)構(gòu)的程序,只需將數(shù)據(jù)層和業(yè)務(wù)層遷移到服務(wù)器上,使用ASP.NET重新設(shè)計表現(xiàn)層即可。使用一臺工作機作為服務(wù)器,其他多臺計算機可以協(xié)同操作同一個數(shù)據(jù)庫文件。當(dāng)單一地區(qū)操作量過大時,進(jìn)行多用戶協(xié)同操作可以提高效率。
[1] 戴友鋒.基于GIS的城市綜合交通信息管理技術(shù)研究[D].鄭州:解放軍信息工程大學(xué),2008:25-28.
[2] 李興林.公路交通公眾出行信息服務(wù)系統(tǒng)的建設(shè)[J].公路交通科技:應(yīng)用技術(shù)版,2008(1):34-36.
[3] 錢樂祥,余明全.土地信息系統(tǒng)的幾個基本問題[J].測繪通報,1999(10):18-21.
[4] 朱紅波,郭宏俊.基于GIS的土地整理基礎(chǔ)信息數(shù)據(jù)庫建立[J].地理與地理信息科學(xué),2003(1):25-26.
[5] 劉宇,王永生,孫慶輝.數(shù)字城市地理空間信息公共平臺的設(shè)計[J].測繪科學(xué)技術(shù)學(xué)報,2006(5):359-362.