引言
近年来国内许多高校逐步建立了网络基础设施构建了一些应用系统但由于缺乏对数字校园总体结构的认识出现了系统构建各自为政缺乏统一规划已构建的系统互割裂信息与资源无法共享而有些系统则集成度过高维护与升级困难网络基础服务平台与应用系统脱节等问题
在数字化校园的建设中URP(University Resource Plan)概念的提出很好地解决了信息共享等问题URP通过建立统一的数据库制定统一的信息标准使各种信息系统以松散耦合的方式集成起来保障了数据的一致性可靠性可用性和安全性原有系统中的历史数据可以通过数据迁移的方式导入到新系统中但在数据迁移的过程中新的问题也随之而来
数据迁移所面临的问题
目前信息系统的开发大都是利用SQL ServerOracleSybase等大型数据库数字化校园建设中的数据库系统也大多采用这几种数据库而DbaseFoxBASEFoxPro是我国近年来应用比较广泛的数据库开发软件高校中仍有很多管理系统采用这种DBF格式的数据库随着新系统的使用原有系统中多年来积累的大量的宝贵的数据资料如何导入到新系统中成为一个要解决的问题也就是我们将面临如何将原始的数据迁移到新系统数据库中
解决思路
统一数据库的主要目的是实现数据共享保障数据的一致性但不论是新的信息系统还是原有的信息系统每个系统的业务本身并没有发生本质的变化因此在数据库的结构到数据方面都可以保持基本一致只是采用的数据库平台不同另外SQL Server自身提供的DTS(Data Transformation Services)工具也包含了将DbaseFoxBASEFoxPro等旧格式数据库文件导入到SQL数据库的功能
因此根据实际的业务需求利用ASPNET所提供的数据库操作功能配合SQL语句来编程完全可以替代DTS的所有功能从而实现大量的历史数据迁移至新的数据库系统中
设计与实现
以全国高校毕业生就业管理系统为例具体说明如何实现数据迁移功能
原系统为教育部统一使用的单机版软件采用FoxPro编写并使用DBF格式文件存储数据新系统是采用B/S结构使用ASPNET编写及SQL Server数据库存储数据
在编写程序进行数据迁移的过程中需要解决以下几个问题
() 原系统数据文件为DBF格式在SQL Server中DBF文件所在的文件夹被认为是一个数据库DBF文件被认为是一个数据表
() 数据迁移过程中DBF文件可能存放在客户端SQL Server数据库在服务器端这需要将DBF文件先上传至服务器端再进行操作
() 根据用户业务需求数据迁移功能应包含初次迁移追加数据覆盖数据等功能
DBF文件上传
传统的DBF格式数据文件一般文件体积较小因此采用ASPNET提供的上传组件即可对于上传文件类型限定为DBF格式以上传学生基本信息表studentdbf为例上传功能代码如下
//判断文件大小是否为
if (FilePostedFileContentLength>)
{
string fileExt=PathGetExtension(File
PostedFileFileName)ToLower();
//判断是否为DBF格式文件
if(fileExt!=dbf)
{
//出错提示
LabelText=只能上传dbf格式文件!!;
}
//合法的非空的dbf文件
else
{
//指定上传目录
string filepath=ServerMapPath(Data/);
//上传至指定目录中
FilePostedFileSaveAs(filepath+
studentdbf);
//进行相关数据迁移操作
……
}
}
else
{
//出错提示
LabelText=上传文件字节数为!!;
}
DBF文件导入
若在SQL Server数据库中不存在目标数据表则使用导入并生成新表的命令导入并建立新数据表功能代码如下
//打开SQL Server数据库连接
myConnectionOpen();
//filepath为DBF文件上传时定义的目标文件夹
//该语句将指定文件夹中的studentdbf文件
//导入至SQL Server的新建数据表student中
string creattb=SELECT * INTO student FROM
Openrowset(MSDASQLDriver=Microsoft
Visual FoxPro Driver;SourceDB=+filepath+;
SourceType=DBF select* from student);
//定义SQL命令
SqlCommand myComm=new SqlCommand(
creattbmyConnection);
//执行导入命令
myCommExecuteNonQuery();
//关闭数据库连接
myCommDispose();
myConnectionClose();
//操作成功提示信息
LabelText=导入并生成学生数据表成功!!;
DBF文件追加
若SQL Server数据库中已存在student数据表则使用追加命令导入数据追加数据功能代码如下
//打开SQL Server数据库连接
myConnectionOpen();
//filepath为DBF文件上传时定义的目标文件夹
//该语句将指定文件夹中的studentdbf文件
//追加至SQL Server的数据表student中
string creattb=INSERT INTO student
SELECT * FROM Openrowset(MSDASQL
Driver=Microsoft Visual FoxPro Driver;
SourceDB=+filepath+;
SourceType=DBFselect* from student);
//定义SQL命令
SqlCommand myComm=new SqlCommand(
creattbmyConnection);
//执行导入命令
myCommExecuteNonQuery();
//关闭数据库连接
myCommDispose();
myConnectionClose();
//操作成功提示信息
LabelText=导入学生数据表成功!!;
DBF文件覆盖
若导入的数据需覆盖SQL Server数据库中原有数据则需先执行删除语句再执行导入语句数据覆盖功能代码如下
//打开SQL Server数据库连接
myConnectionOpen();
//删除SQL Server中student数据表内容
string creattb=delete from student;
//定义SQL命令
SqlCommand myComm=new SqlCommand
(creattbmyConnection);
//执行删除命令
myCommExecuteNonQuery();
//filepath为DBF文件上传时定义的目标文件夹
//该语句用指定文件夹中的studentdbf文件
//覆盖SQL Server数据表student中的数据
creattb=INSERT INTO student SELECT *
FROM Openrowset(MSDASQL
Driver=Microsoft Visual FoxPro Driver;
SourceDB=+filepath+;
SourceType=DBFselect* from student);
//重新定义SQL命令
myCommCommandText=creattb;
//执行导入命令
myCommExecuteNonQuery();
//关闭数据库连接
myCommDispose();
myConnectionClose();
//操作成功提示信息
LabelText=覆盖学生数据表成功!!;
从上面的代码中可以看出覆盖操作被分解为删除追加两步执行
类似的也可以先删除SQL Server中的student数据表然后采用的导入并生成数据表两个操作来实现覆盖数据其中删除数据表可使用SQL 命令DROP TABLE student来实现
结 语
在程序的可靠性准确性等方面通过对数万条学生信息的迁移测试和校验数据的导入追加覆盖等功能完全达到了要求能将原有的DBF数据文件准确快速的导入到SQL Server数据库中
DBF数据迁移到SQL Server数据库中的方法为解决数据迁移中的稳定性安全性准确性等问题提供了有力的帮助有效地解决了大量历史数据的继承问题同样这种迁移方法只需替换相应的SQL语句即可用于MDB文件EXCEL文件以及特定格式的文本文件等各种数据库文件的数据迁移中