□周相丽 □贺旭东
(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
在实际水文整编和数据库维护工作中经常需要对数据库中的水文原始、成果数据进行导入导出。现有数据库管理系统大多提供数据导入导出功能,可将数据库及其对象从一个服务器实例移动或复制到另一个服务器实例。如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(表示服务器可处理的最大批大小)或任一合适数据以减少批量更新服务器的次数。主要更新语句如下。
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