□周相麗 □賀旭東
(1河南省信陽水文水資源勘測局;2河南省鄭州水文水資源勘測局)
基礎水文數據庫導入導出工具設計與實現分析
□周相麗1□賀旭東2
(1河南省信陽水文水資源勘測局;2河南省鄭州水文水資源勘測局)
在基礎水文數據庫維護過程中,經常需要在不同的數據庫系統及其版本間導入導出數據。Visual Studio Integrated Development Environment提供了功能齊全的代碼編寫、編譯、調試等工具,支持C#語言,可以快速方便地創建和部署Web應用程序、XML Web Services和傳統的客戶端應用程序。文章設計了基礎水文數據庫導入導出工具,并使用Visual C#及ADO.NET、Oracle Managed Data Access組件開發實現。
基礎水文數據庫;水文數據;ADO.NET
在實際水文整編和數據庫維護工作中經常需要對數據庫中的水文原始、成果數據進行導入導出?,F有數據庫管理系統大多提供數據導入導出功能,可將數據庫及其對象從一個服務器實例移動或復制到另一個服務器實例。如Microsoft SQL Server提供SQL Server導入和導出向導(DTSWizard.exe)及SQL ServerManagementStudio,Oracle提供 OracleSQL Developer。部分水文業務軟件亦提供不同數據庫之間不同站年、不同數據項目的數據遷移,如南方片水文資料整匯編軟件。不過有些應用場景需要在不同的數據庫系統及其版本間遷移數據,如SQL Server與Oracle之間及SQL Server 2000、2005、2008之間,這時需要更通用的程序實現了。
.NET Framework數據提供程序(.NET Framework data provider)、Oracle托管數據訪問組件(Oracle Data Provider for.NET Managed Driver)提供.NET環境下對關系數據庫的訪問。NET Framework、Oracle數據提供程序包含4個核心對象,如表1所示。這些對象用于連接至數據源、執行命令,提取數據集或更改數據源數據。

表1 數據提供程序核心對象表
3.1 用戶界面
工具是一個單文檔項目,程序界面簡潔,整個界面由菜單欄、TabContrl和ProgressBar組成。菜單欄包含文件、選項、查看及幫助四個菜單項。TabContrl包含兩個TabPage頁面,分別為首頁和數據維護頁面。首頁頁面由數據庫設置、數據路徑設置、文件列表和日志框構成。數據維護頁面由備份數據庫設置、可選測站列表框、年份列表框、成果表類型列表框和同步按鈕構成。
3.2 程序功能
基礎水文數據庫導入導出工具應具有連接至數據庫功能,站年、數據項目類型選擇功能以及數據遷移功能等功能。
連接至數據庫功能:可選擇源數據庫及目的數據庫類型,如可選擇SQL Server或Oracle數據庫,輸入用戶名和口令后點擊連接按鈕連接至數據庫。
站年、數據項目類型選擇功能:可選擇需遷移的測站列表、資料年份和數據項目類型。數據項目類型包括《基礎水文數據庫表結構及標識符標準》所列的成果數據庫表結構、南方片水文資料整匯編軟件定義的原始數據庫表結構以及用戶自定義擴展的數據庫表結構。主要數據庫表結構如表2所示。
數據遷移功能:按用戶所選源、目的數據庫及站年、數據項目類型將數據從源服務器實例移動或復制到目的服務器實例。

表2 主要數據庫表結構表
4.1 數據庫導入導出主要方法
①使用Sql(Oracle)Command、Sql(Oracle)DataAdapter和Sql (Oracle)Connection從源、目的數據庫中取得數據記錄,并分別填充至源、目的DataSet中。②比較源、目的DataSet中的記錄,并將較目的DataSet中新的記錄由源DataSet復制到目的DataSet。③使用目的DataSet的Sql(Oracle)DataAdapter.Update ()將修改過的目的DataSet記錄行返回目的數據庫。
4.2 實現步驟
4.2.1 連接至數據庫
使用 SQL、Oracle數據訪問組件提供的 Sql(Oracle) Connection類打開源、目的數據庫連接。SqlConnection連接字符串為:string.Format("Data Source={0};Pooling=false;User Id= {1};Password={2};",ORASRVR, UserId, Password);Oracle Connection連接字符串為:
string.Format("Data Source={0};Initial Catalog={1};User ID= {2};Password={3};",DataSource,InitialCatalog,UserID,Password)。
4.2.2 加載數據庫記錄集至DataSet
設置 Sql(Oracle)Parameter查詢參數,調用 Sql(Oracle) DataAdapter的Fill方法將記錄填充至DataSet中。Sql(Oracle) DataAdapter的MissingSchemaAction屬性設置為MissingSchema Action.AddWithKey,以使Sql(Oracle)DataAdapter創建DataSet的架構包括主鍵信息。
4.2.3 復制DataSet記錄并更新目的數據庫
DataSet為存放于內存中的數據緩存,DataTable為內存中的數據表。System.Data命名空間DataTable類提供Select()方法用以獲取DataRow對象數組。構造適當的查詢表達式便可返回目的數據庫所需記錄,如查詢降雨量摘錄表過程主要語句可定義如下。
string expression=string.Format("STCD=‘{0}’and BGTM=‘{1}’ and ENDTM=‘{2}’",STCD,BGTM,ENDTM);DataRow []datarow=
dataset.Tables["TBL"].Select(expression)。待將查詢到的datarow復制至目的DataSet后,便可使用目的DataSet的Sql(Oracle) DataAdapter .Update()方法,將記錄更新至目的數據庫。為提高應用程序的性能,Sql(Oracle)DataAdapter.UpdateBatchSize屬性可設置為0(表示服務器可處理的最大批大?。┗蛉我缓线m數據以減少批量更新服務器的次數。主要更新語句如下。
Sql(Oracle)DataAdapter.UpdateBatchSize=UpdateNumber;Sql (Oracle)DataAdapter.Update(DataSet,TableName);DataSet.ccept Changes();Sql(Oracle)Transaction.Commit()。
文章設計并實現了基礎水文數據庫導入導出工具。軟件界面簡潔、操作簡便,包括站年、數據項目類型選擇以及數據遷移等功能。借助本軟件,可以跨越數據庫系統和版本,在SQL Server、Oracle之間或同一數據庫管理系統不同版本之間任意導入導出數據。系統實現主要應用Sql(Oracle) Connection、Sql(Oracle)Command、Sql(Oracle)DataAdapter等對象,讀者在文章基礎上不難構建自己的數據庫導入導出軟件。
編輯:趙 鑫
P337
:B
:1673-8853(2017)02-0038-02
2016-11-16