在项目中迁移MS SQLServer到Mysql数据库,实现MySQL数据库的快速整合
在开发项目的时候,往往碰到的不同的需求情况,兼容不同类型的数据库是我们项目以不变应万变的举措之一,在底层能够兼容多种数据库会使得我们开发不同类型的项目得心应手,如果配合快速的框架支持,那更是锦上添花的举措。我开发的项目或者框架,采用了微软企业库Enterprise Library的模块,倾向于支持多种数据库,也为我们开发不同类型的项目提供非常方便、快速、统一的处理方式。一般常规的数据库包括MS Server、Oracle、MySQL、PostgreSQL、SQLite、DB2、国产达梦等数据库,本篇随笔主要介绍如何实现从MS SQLServer到Mysql数据库,并为不同数据库类型添加实现底层的解决思路。
1、SQLServer数据库导出到MySQL
如果我们已经基于SQL Server进行了开发,并且具有很多基础的数据库数据了,那么我们可以利用SQL Server导出到MySQL数据库中,这种是我们常见的一种开发方式,毕竟基于SQLServer数据库开发起来会比较快速一些。
SQL Server数据库的管理工具是SQL Server Management Studio;而Mysql数据库的管理工具则推荐使用Navicat,这是一款非常强大好用的管理工具。
首先我们使用Navicat建立自己一个空白的Mysql数据库,用来承载SQL Server 的数据导出需要。
例如我们创建一个和SQL Server数据库同名的MVCWebMisTest数据库,并且设置它的字符集为默认或者UTF8的编码方式,如下所示。

然后利用SQL Server Management Studio进行数据的直接导出,选择【任务】【导出数据】,如下所示。

然后在弹出的数据库里面选择导入的数据源和目标,选择导入的数据源界面如下所示。

然后在目标里面选择Mysql的驱动,填入相应的信息,如下界面所示。

然后在下一步选择需要导出的表信息。

很不幸,这种方式操作数据库的导出操作没有办法成功。

2、从Navicat中导入MS SQLServer数据库数据
既然通过SQL Server Management Studio无法导入数据到Mysql数据库中,那么我们尝试下Mysql的数据库管理工具Navicat,它也有数据传输(导入导出)的功能。
我们在刚才建好的数据库上面右键调出对应的【数据传输】功能,然后设置好数据的源和目标,如下所示。

执行数据传输操作,顺利完成,非常强大和方便,而且没有任何错误。如下界面所示。

检查数据库导入的数据表和数据,没有问题。

3、Mysql数据库之间的传递
那么如果我们需要部署到服务器,就需要把当前的Mysql数据库传递(或者还原)到服务器的MySQL数据库中,一般来讲,我们利用Mysql的Navicat管理工具就可以实现数据导出的sql文件里面,然后在服务器里面使用反向操作即可还原数据库成功的了。

转储SQL文件成功如下界面所示。

而在服务器的上面,我们可以利用Navicat的运行SQL文件即可还原Mysql数据库了。


运行的结果如下所示。

当然有时候也会发现存在一些表依赖引用的情况发生,不知道是不是Navicat版本出来的问题,不过如果有这个问题,只要不是编码的问题,都好解决,打开sql文件把创建表的顺序调整一下就可以了,我就碰到过这种极端的情况,把一些依赖表调整到前面来就可以顺利导入数据了。
4、底层的Mysql数据库支持
底层支持多种数据库,对我们开发不同类型的项目有着非常重要的支撑作用,我们不知道客户具体环境会选择那种数据库,如果我们扩展不同的数据库非常方便和迅速,无疑会给我们提供很好的控制力和信心。

采用了微软企业库Enterprise Library作为我们底层的数据库访问模块后,对于多种数据库的访问操作,就会统一采用这个企业库的数据库访问对象,操作起来非常一致,为了对不同数据库的常规增删改查等一些操作进行进一步的封装,已达到简化代码的目的,因此我们可以为每个不同的数据库定义一个数据访问操作基类,以便实现一些不同数据库差异性的处理,但是它们还是有一个共同的数据访问基类。
采用不同的数据库,我们需要为不同数据库的访问层进行生成处理,如为SQLServer数据的表生成相关的数据访问层DALSQL,里面放置各个表对象的内容,不过由于采用了相关的继承类处理和基于数据库的代码生成,需要调整的代码很少。

我们为了不同的数据库准备了不同的数据库实现,不过也仅仅是特殊的接口调用而已,一般常规的增删改查以及分页等普通接口,全部交由基类接口实现即可。
如对于权限管理系统这个常规框架基础模块,多数据库的支持就非常必要的,它的数据库访问层如下所示。

不同的数据库访问层实现也是相差无几的,一般可以利用代码生成工具进行快速生成后,增加自定义接口实现即可。

而对于不同数据库的支持,直接复制过去,改动一下数据库实现层的命名空间和访问层的基类就可以了,如果有自定义SQL脚本上的差异,可以适当的修改即可。一般从一种数据库支持扩展到另外一种数据库支持,无非就是复制过去,进行调整一下即可,非常方便快速,这个就是整体框架支持的魅力和效率所在。
这样整合多种数据库支持的底层后,整个数据访问的架构设计如下所示。

有了这些底层支持,我们在配置文件选择不同的数据库的时候,选择性的保留其中一种数据库配置信息即可。下面是各种数据库支持的配置信息参考,一般保留一种即可。

在项目中迁移MS SQLServer到Mysql数据库,实现MySQL数据库的快速整合的更多相关文章
- Java Web学习系列——Maven Web项目中集成使用Spring、MyBatis实现对MySQL的数据访问
本篇内容还是建立在上一篇Java Web学习系列——Maven Web项目中集成使用Spring基础之上,对之前的Maven Web项目进行升级改造,实现对MySQL的数据访问. 添加依赖Jar包 这 ...
- 如何在 ETL 项目中统一管理上百个 SSIS 包的日志和包配置框架
一直准备写这么一篇有关 SSIS 日志系统的文章,但是发现很难一次写的很完整.因为这篇文章的内容可扩展的性太强,每多扩展一部分就意味着需要更多代码,示例和理论支撑.因此,我选择我觉得比较通用的 LOG ...
- 使用SeasLog打造PHP项目中的高性能日志组件(一)
云智慧(北京)科技有限公司 高驰涛 什么是SeasLog SeasLog是一个C语言编写的PHP扩展,提供一组规范标准的功能函数,在PHP项目中方便.规范.高效地写日志,以及快速地读取和查询日志. 为 ...
- iOS开发之MVVM在项目中的应用
今天写这篇博客是想达到抛砖引玉的作用,想与大家交流一下思想,相互学习,博文中有不足之处还望大家批评指正.本篇博客的内容沿袭以往博客的风格,也是以干货为主,偶尔扯扯咸蛋(哈哈~不好好工作又开始发表博客啦 ...
- 在java项目中怎样利用Dom4j解析XML文件获取数据
在曾经的学习.net时常常会遇到利用配置文件来解决项目中一些须要常常变换的数据.比方数据库的连接字符串儿等.这个时候在读取配置文件的时候.我们一般会用到一个雷configuration,通过这个类来进 ...
- 在 ASP.NET Core 项目中使用 AutoMapper 进行实体映射
一.前言 在实际项目开发过程中,我们使用到的各种 ORM 组件都可以很便捷的将我们获取到的数据绑定到对应的 List<T> 集合中,因为我们最终想要在页面上展示的数据与数据库实体类之间可能 ...
- 将 Net 项目升级 Core项目经验:(二)修复迁移后Net Standard项目中的错误
修复迁移后Net Standard项目中的错误 接上一章,项目编译结果如下: 解决依赖dll引用 在Net Framework项目的引用如下: 各引用和作用: log4net(1.10.0.0) 用于 ...
- 【原创】互联网项目中mysql应该选什么事务隔离级别
摘要 企业千万家,靠谱没几家. 社招选错家,亲人两行泪. 祝大家金三银四跳槽顺利! 引言 开始我们的内容,相信大家一定遇到过下面的一个面试场景 面试官:"讲讲mysql有几个事务隔离级别?& ...
- 如何在AbpNext项目中使用Mysql数据库
配置步骤: 1.更改.Web项目的appsettings.json的数据库连接字符串.如:server=0.0.0.0;database=VincentAbpTest;uid=root;pwd=123 ...
随机推荐
- Docker 网络之进阶篇
笔者在<Docker 基础 : 网络配置>一文中简单介绍了容器网络的基本用法,当时网络的基本使用方式还处于 --link 阶段.时过境迁,随着 docker 的快速发展,其网络架构也在不断 ...
- 图解ARP协议(二)ARP攻击原理与实践
一.ARP攻击概述 在上篇文章里,我给大家普及了ARP协议的基本原理,包括ARP请求应答.数据包结构以及协议分层标准,今天我们继续讨论大家最感兴趣的话题:ARP攻击原理是什么?通过ARP攻击可以做什么 ...
- 使用LR编写HTTP协议Json报文格式接口脚本实战
最近在做HTTP协议接口压测时,遇到一些编写脚本方面的问题,在这里总结记录下,以便以后温习,也希望能帮助到和我有同样困惑的朋友吧. //实战代码如下所示:Action() { lr_start_tra ...
- keil常用配置设置
1.设置tab键为空格4个进入Configuration->Editor,设置如下: 2.代码自动补齐进入Configuration->Editor,设置如下: 3.使用快捷键实现批量注释 ...
- JavaScript 是如何工作:Shadow DOM 的内部结构 + 如何编写独立的组件!
这是专门探索 JavaScript 及其所构建的组件的系列文章的第 17 篇. 如果你错过了前面的章节,可以在这里找到它们: JavaScript 是如何工作的:引擎,运行时和调用堆栈的概述! Jav ...
- 20190322-a标签、img标签、三列表、特殊字符实体、表格
目录 1.a标签 a标签的属性 锚点 2.img标签 img标签的属性 图像热区 3.三列表 有序列表(Ordered List) ol>li 无序列表(Unordered List) ...
- JavaScript 函数闭包
在函数中定义函数,这些定义的内部函数可以访问它们所在的外部函数中所有局部变量.参数以及声明的其它内部函数.当这样的内部函数在包含它们的外部函数之外被调用时就会形成闭包. 在没有class机制只有函数的 ...
- (办公)plug-in org.eclipse.jdt.ui was unable to load class org.eclipse.jdt.internal
今天上午开发环境遇到这个问题,解决方案如下,(解决了之后,项目并没有丢失.) 因为Eclipse的这个plug-in org.eclipse.jdt.ui was unable to load cla ...
- GitHub和75亿美金
如果你是看到了75亿进来的,还在纳闷前面那个github的是个什么,你可以走人了?如果你进来是想看到微软两个字的,请继续. 微软以75亿美金的股票收购Github这件事情,从周六一早我爬山到香山琉璃塔 ...
- Axure RP 8 注册码
升级了8.1.0.3377版本后,需要使用下面这组注册码 许可:zdfans.com 重点:gP5uuK2gH + iIVO3YFZwoKyxAdHpXRGNnZWN8Obntqv7 ++ FF3pA ...