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