好学IT学院:IT信息技术分享交流平台
来源:互联网  作者:Felix的技术专栏  发布时间:2006-12-24  ★★★加入收藏〗〖手机版
【全源码】异构数据库转换工具
摘要:在我看来Oracle和SQLServer数据库之间如果要复制数据和结构,好像还是个麻烦事,当然肯定会有相似或更好的工具,但由于我天生懒惰不想去找,索性自己写了个工具,可以在SQLServer和Oracle之间进行任意组合的数据转换。目前这个……

异构数据库转换工具的结构说明

转载自 :http://dragonpro.cnblogs.com/archive/2006/04/09/370889.html

以下先介绍项目里各文件的作用:

1.App.config:主要放置EntLib配置的配置文件

2.appsettings.config:主要配置数据库字段类型的对应关系。

3.DataConfiguration.config:配置数据库的连接,分为左数据库和右数据库,两者要配置正确程序才可以使用,打开配置后会有相应的说明。

上面这三个配置文件建立在Microsoft Enterprise Library之上,如果不清楚此框架的使用可以参考第一期博客园杂志里面有对Entlib较详细的介绍。

4.DataExchange.exe.manifest:使用WinXP中的样式的文件,这可以使程序在运行的时候调用系统样式,当然窗体各控件的FlatStyle属性要为“System”。

5.Enums.cs:系统枚举,主要作用是枚举不同类型的数据库。

6.Exchange.cs:主要转换类文件,程序主要使用此类转换数据

7.ExDatabase.cs:包装DB的类,屏蔽异构数据库,提供操作各类数据库的操作SQL代码。

8.FrmMain.cs:系统表示层。

程序的核心就是Exchange这个类啦,封装了转换逻辑,其中有两个属性,db1&db2前者始终代表源数据,后者代表目的数据,而dbl&dbr则代表左数据库和右数据库,通过赋值dbl到db1或db2从而自动判断前者是左数据库还是右数据库。

问题:在导入SQLServer数据库到Oracle的时候,一般采用构建Insert语句的方式进行插入数据,但如果某条数据构建的insert语句长度大于4000则Oracle会拒绝执行,这时通过构建存储过程的方式继续导入数据,不会产生数据的丢失,所有过程都有日志记录,当在日志里看到如EEEEEE这样的字符串时表明程序有异常产生则需要留意,不过程序会处理大部分异常,一般不会出现导入不成功的情况。

前面说了在构建Oracle语句的时候如果超过4000个字符的话,Oracle数据库是会抛出异常的,所以需要改用其他方式,另外还有一个不需要使用存储过程插入数据或Update数据的方式,那就是使用ado.net提供的语句参数的方式比如insert into tablename (column)values(:param),构建好此语句后,然后像调用存储过程一样使用传递参数的方式调用即可,这样代码既好看又不会使语句超长。

可能大部分朋友对这个小工具不会感兴趣,不过当我们做项目时如果有这方面的需要的话我希望还是能用此软件帮上点忙。