摘 要 本文介紹了一種基于關系數據庫大字段存儲的高校基建檔案管理方法,并設計了原形系統。通過在華中師范大學基建檔案的日常管理中驗證了方法的實用性、高效性。
關鍵詞 關系數據庫 高校基建檔案 原型系統
中圖分類號:G47文獻標識碼:A
一、引言
基建檔案是指在基礎建設項目建設全過程中產生的各種檔案資料,該檔案資料具有多源異構的特點 。所謂多源是指檔案資料的來源各不相同,檔案資料的來源涉及到整個基建項目從醞釀、決策到建成使用的整個過程。異構則是指基建檔案文件格式具有多樣性的特點,包括文檔文件(doc)、圖紙文件(dwg)、圖表文件(xls)、照片(jpg)、視頻(avi)等。如何將基建項目中多源異構數據合理的組織起來對于基建管理具有重要意義。
傳統基于文件的管理方式查詢檢索效率低,且數據共享程度低,即當多個程序共享一數據文件時,文件的修改,需得到所有應用的許可,不能達到真正的共享,即數據項、記錄項的共享 。文件與關系數據庫混合的管理方式可以提高查詢檢索效率,但從根本上無法解決共享問題,且當數據文件修改時,應用程序也隨之需要改變。本文提出了一種基于關系數據庫的基建檔案管理方式來管理基建項目中產生的各檔案資料。
二、關鍵技術
(一)基于SQL Server 2000的文檔數據管理。
基建檔案管理信息系統建設以前,基建檔案沒有進行統一的管理。本系統的建設為基建檔案管理提供了方便,通過數據庫來統一對基建檔案進行管理。方便基建檔案在管理機構內部流轉。SQL Server 2000數據庫中提供了image類型的字段,該字段可以存儲長度可變的二進制數據 ,長度從 0 到 2^31-1 (2,147,483,647) 個字節。使用 ADO.NET來存取各種基建檔案文檔文件 。在ADO.NET中使用 Command 和 Parameter 對象將數據從 Byte 數組寫入 BLOB 列。可將文件數據體完全讀取到內存,因此在寫入服務器時無需將數據分塊。Byte 數組和數組的長度傳遞到 Parameter 構造器,多數其他參數都是填充值。
在文檔讀取時,使用ADO.NET中提供的 DataReader 對象檢索 BLOB 值并將其分配到一個字節數組 。因為 BLOB 已經完全在內存中,無需將數據分塊,因此此值被分配一個到 Byte 數組。對 GetBytes 方法有兩個調用;第一個接收以字節為單位的 BLOB 的長度,并用于確定 Byte 數組的維度。第二個調用檢索數據。FileStream 對象用于將 Byte 數組寫入磁盤。
(二)基于Webbrowser控件的異構數據顯示。
在使用客戶端打開Office 或pdf或圖片文檔時,用戶可以在不使用 OLE 容器控件創建嵌入的 OLE 對象的前提下而直接鏈接到現有的文檔,并將其作為 ActiveX 文檔對象就地打開。Microsoft WebBrowser 控件提供了這種解決方案。ActiveX 文檔是行為比傳統 OLE 對象更像 ActiveX 控件的可嵌入的 OLE 對象。與常規嵌入對象不同的是,ActiveX 文檔不是作為更大文檔中所包含的對象而設計的。其本身可以算作是僅供查看器(如 Internet Explorer)查看或是與其他文檔(如活頁夾文件)一起集中到單個資源的完整文檔。WebBrowser 控件 (Shdocvw.dll) 是 Internet Explorer 的一部分,可以使用WebBrowser 控件的功能,將各種異構數據通過WebBrowser 控件顯示瀏覽。
(三)基于ArcEngine MapControl控件的矢量數據顯示。
MapControl控件主要用于進行地圖數據的可視化顯示,它提供了類似ArcMap中的空間數據顯示窗口(Data View)的功能,通過它用戶可完成很多提高地圖顯示效果的功能。MapControl提供了地圖視圖操作的主要功能主要有:顯示圖層地圖,放大、縮小、漫游,通過該控件可以開發相應的客戶端系統提供基建檔案矢量數據的顯示,如CAD數據、SHP數據等。
三、系統架構
根據當今軟件發展趨勢和基建檔案管理信息系統業務需求分析,系統的實施采用主流成熟的軟件架構,滿足系統用戶種對多源異構基建檔案的管理及查詢要求。本系統是基于C/S模式的局域網絡系統。數據存放于服務器,由服務器統一管理,所有客戶端應用程序共享一份數據。客戶端應用程序在需要是向服務器發出請求,服務器處理請求并把處理結果返回給客戶端應用程序。系統運行于同一個局域網內,該局域網由至少一臺服務器,數臺客戶機組成。系統的物理結構框架如圖1所示:
客戶端系統由兩個子系統組成,數據錄入子系統和基建檔案查詢檢索子系統。數據錄入子系統主要負責所有基建檔案的入庫整理工作,所有基建檔案數據均存儲在一個包含類型為img大字段的表中。基建檔案查詢檢索子系統主要負責對于入庫基建檔案的查詢檢索工作,用戶鍵入必要的檢索信息可返回相應的文件數據體,并將結果顯示出來方便用戶查看,并提供相應的打印與輸出功能。系統邏輯結構如圖2所示:
圖2系統邏輯結構圖
四、數據庫設計
SQLSERVER數據庫是集數據庫、快速應用開發技術、WEB等先進技術為一體的群件平臺。它能夠跨越地域、部門之間的界限,保證數據庫的效率和事務處理等功能;同時由于根據實際的訪問量和數據量以及當前軟硬件設備、資金限制,在綜合比較不同的數據庫產品后,我們采用SQLSERVER為數據庫服務器。
SQLSERVER數據庫的主要功能可以概述為:
1、文檔數據庫功能 : SQLSERVER數據庫是一個文檔數據庫管理系統。SQLSERVER數據庫不僅可以包含結構化數據信息,還可以存儲、管理其他數據系統無法存儲與管理的非結構化數據,并提供搜索、文檔鏈接等信息檢索、處理手段。
2、數據共享功能 : SQLSERVER數據庫系統支持分布式環境所要求的全局數據庫名、網絡透明技術、全局分布式查詢優化、異步過程調用技術等關鍵特性。
3、SQLSERVER服務器之間、客戶與服務器之間通過 SQLSERVER網絡產品進行通訊,通過它客戶向服務器數據庫、或者一個數據庫向另一個數據庫發送數據存取請求,接收請求的服務器執行請求服務并返回結果,從而實現異地數據的存取,達到使分布在各地的數據共享。
4、安全保障功能 : SQLSERVER數據庫有包括數據庫備份和恢復、用戶角色管理等完善的安全策略,保證數據的安全、穩定;在計算機系統出現硬件、軟件、網絡或系統故障時,仍可為用戶提供正確的數據。
五、原型系統實現
各種類型的文檔文件均先轉化為二進制流,再寫入數據類型為img的大字段列中。具體使用VB.NET開發語言和ADO.NET進行數據庫開發,將基建檔案資料錄入數據庫中。以word文檔為例,將文件寫入數據庫的函數代碼如下:
Private Sub File2SqlBlob(ByVal SourceFilePath As String)
Dim cn As New SqlConnection(\"server=localhost;integrated security=yes;database=NorthWind\")
Dim cmd As New SqlCommand(\"UPDATE Categories SET DOC=@DOC CategoryName='Test'\", cn)
Dim fs As New System.IO.FileStream(SourceFilePath, IO.FileMode.Open, IO.FileAccess.Read)
Dim b(fs.Length() - 1) As Byte
fs.Read(b, 0, b.Length)
fs.Close()
Dim P As New SqlParameter(\"@DOC\", SqlDbType.Image, b.Length, ParameterDirection.Input, False, 0, 0, Nothing, DataRowVersion.Current, b)
cmd.Parameters.Add(P)
cn.Open()
cmd.ExecuteNonQuery()
cn.Close()
End Sub
數據錄入子系統界面如圖3所示:
圖3數據錄入系統界面
進行查詢檢索時,由于一個獨立文檔在數據庫中表示為表中的一行記錄,根據用戶輸入的關鍵信息可以查詢數據,再將基建檔案實體文件從img大字段中讀取出來,再根據文件格式存儲在系統臨時目錄下,利用Webbrowser控件或者MapControl控件進行顯示,供用戶查看并能夠進行打印和輸出。以Word文檔為例,從大字段中讀取文件的代碼如下:
Private Sub SqlBlob2File(ByVal DestFilePath As String)
Dim DOCCol As Integer = 0 ' the column # of the BLOB field
Dim cn As New SqlConnection(\"server=localhost;integrated security=yes;database=NorthWind\")
Dim cmd As New SqlCommand(\"SELECT DOC FROM Categories WHERE CategoryName='Test'\", cn)
cn.Open()
Dim dr As SqlDataReader = cmd.ExecuteReader()
dr.Read()
Dim b(dr.GetBytes(DOCCol, 0, Nothing, 0, Integer.MaxValue) - 1) As Byte
dr.GetBytes(DOCCol, 0, b, 0, b.Length)
dr.Close()
cn.Close()
Dim fs As New System.IO.FileStream(DestFilePath, IO.FileMode.Create, IO.FileAccess.Write)
fs.Write(b, 0, b.length)
fs.Close()
End Sub
通過以上兩個函數可以方便進行基建檔案文檔的上傳與下載,實現文檔在部門內的流轉。Webbrowser控件可以實現文檔文件(doc)、圖表文件(xls)、照片(jpg)、視頻(avi)文件的顯示,MapControl控件實現圖紙文件(dwg)的顯示。如圖4所示:
圖4系統查詢界面
六、結論
基于數據庫存儲的基建檔案管理,適應了如今大力發展信息化建設的潮流。將原本基于文件的管理方式朝著數字化的管理進行轉變,很大程度地提高了基建檔案管理的效率,方便了基建檔案的部門內部共享。通過在華中師范大學基建處內部的使用,驗證了該方案的可靠性與實用性,提高了部門內部的工作效率,推動了部門內部信息化建設的發展。□
(作者單位:華中師范大學基建處)
注釋:
陳傳華,劉學應. 對高校基建檔案管理的認識. 科技情報開發與經濟, 2005,(10) .
林端莊. 高校基建檔案科學化管理探析. 福建建設科技, 2007,(02).
張俊蘭,李源平. 基于SQL Server的Asp.net圖片存儲技術電子設計工程, 2009,(03).
林津. 淺析加強完善高校基建檔案管理工作的創新. 中國科教創新導刊, 2009,(25) .
劉友生. 基于.NET數據庫BLOB數據處理技術在MIS開發中的應用. 云南民族大學學報(自然科學版), 2007,(01) .