采用C#泛型实现数据库之间的切换

本文涉及的产品
RDS SQL Server Serverless,2-4RCU 50GB 3个月
推荐场景:
云数据库 RDS SQL Server,基础系列 2核4GB
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
简介:
    最近做的一个项目,我最开始选用的是 MySql 5.0 数据库,项目提交之后,对方要求换成 MS SQLServer 2000,还好数据层操作基本采用的是标准的SQL语句,也未使用存储过程,于是将原有的数据接入层代码改写成泛型类,只改了不到一百行代码,具体的SQL操作语句一句未动,便实现了数据库之间的切换。下面简述:

    数据库不是很复杂,因此我采用了两个类:

(1) DataProvider 泛型类

public   class  DataProvider < ConnType, CmdType >
    where ConnType : IDbConnection, 
new ()
    where CmdType : IDbCommand,
new  ()
{
    dot.gif
}

    提供数据库表的Insert,Update,Select,Delete操作。
    因为 IDbCommand能够由 IDbConnection 获取,其实只需要有一个泛型参数ConnType 的,不过这样以来,具体的代码改动比较大,偶就采用了两个泛型参数。

(2)ConnectionPool 泛型类

public   class  ConnectionPool < T >
        where T : IDbConnection,
new  ()
{
    dot.gif
}

    最开始没在MySql 5.0 中找到对数据库连接池的支持,于是自己写了一个简单的数据库连接池。

    下面,就是采用 C# 的NB语法――using:

(1)如果使用 MySql 数据库:

using  DataProvider  =  DataProvider < MySql.Data.MySqlClient.MySqlConnection, MySql.Data.MySqlClient.MySqlCommand > ;

(2)如果使用 SQLServer 数据库:

using  DataProvider  =  DataProvider < System.Data.SqlClient.SqlConnection, System.Data.SqlClient.SqlCommand > ;

    这样一来,其它地方的代码一句都不用动了。

    懒惰是程序员的美德。我的一台电脑上装的是 SQLServer 2000数据库,一台电脑上装的是 MySql数据库,我经常一会在这台电脑上干活,一会在另外一台电脑上干活,两个电脑上的代码应该一致啊。因此,采用预编译指令:

#if  MSSQLSERVER
using  System.Data.SqlClient;
using  DataProvider  =  DataProvider < System.Data.SqlClient.SqlConnection, System.Data.SqlClient.SqlCommand > ;
#elif  MYSQL
using  MySql.Data;
using  DataProvider  =  DataProvider < MySql.Data.MySqlClient.MySqlConnection, MySql.Data.MySqlClient.MySqlCommand > ;
#endif

    这样在编译时指定条件编译符号 " MYSQL " 得到的就是MySql版本的代码,指定条件编译符号" MSSQLSERVER ",得到的就是 SQLServer 版本的代码。

    其它:

    (1)理论上来说,采用反射得到的解决方案更完美,不过那样工期会更长,没必要啦啦啦啦啦啦。。。。。。。。。。。。。

    (2)数据库设计,偶采用的是免费软件 Toad Data Modeler 免费版,里面提供了数据库切换功能,切换过去,稍微改动改动。

    (3)这次开发工具采用的全是开源软件或者免费软件,都是超级好用的东东,感觉开发速度并不比庞大的收费软件慢。用到的工具如下:
    IDE:VS 2005 Express (C++版,C#版,Web开发版),.Net的aspnet命令行编译工具
    版本管理:SVN,小乌龟SVN Client
    Shell:Windows Power Shell(这玩意既然出来了,就要充分利用)
    UML建模:StarUML(功能强大的开源UML,比偶以前用过的JUDE,ArgoUML强大很多,支持C#)
    数据库建模:Toad Data Modeler 免费版

    数据库管理工具:EMS SQL Manager 2005 lite for MySQL

本文转自xiaotie博客园博客,原文链接http://www.cnblogs.com/xiaotie/archive/2007/01/02/610121.html如需转载请自行联系原作者


xiaotie 集异璧实验室(GEBLAB)

相关实践学习
如何在云端创建MySQL数据库
开始实验后,系统会自动创建一台自建MySQL的 源数据库 ECS 实例和一台 目标数据库 RDS。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助 &nbsp; &nbsp; 相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
4月前
|
SQL 数据库 C#
C# .NET面试系列十一:数据库SQL查询(附建表语句)
#### 第1题 用一条 SQL 语句 查询出每门课都大于80 分的学生姓名 建表语句: ```sql create table tableA ( name varchar(10), kecheng varchar(10), fenshu int(11) ) DEFAULT CHARSET = 'utf8'; ``` 插入数据 ```sql insert into tableA values ('张三', '语文', 81); insert into tableA values ('张三', '数学', 75); insert into tableA values ('李四',
131 2
C# .NET面试系列十一:数据库SQL查询(附建表语句)
|
4月前
|
数据库
ABAP 泛型编程实战 - 分享一个数据库表内容的拷贝工具试读版
ABAP 泛型编程实战 - 分享一个数据库表内容的拷贝工具试读版
|
4月前
|
存储 安全 编译器
C# 11.0中的泛型属性:类型安全的新篇章
【1月更文挑战第23天】C# 11.0引入了泛型属性的概念,这一新特性为开发者提供了更高级别的类型安全性和灵活性。本文将详细探讨C# 11.0中泛型属性的工作原理、使用场景以及它们对现有编程模式的改进。通过深入了解泛型属性,开发者将能够编写更加健壮、可维护的代码,并充分利用C#语言的最新发展。
|
26天前
|
关系型数据库 Java MySQL
C#winform中使用SQLite数据库
C#winform中使用SQLite数据库
30 3
C#winform中使用SQLite数据库
|
26天前
|
编译器 C#
C#中内置的泛型委托Func与Action
C#中内置的泛型委托Func与Action
38 4
|
26天前
|
关系型数据库 MySQL 大数据
C#使用SqlSugar操作MySQL数据库实现简单的增删改查
C#使用SqlSugar操作MySQL数据库实现简单的增删改查
99 2
|
12天前
|
C#
C# 面向对象编程(三)——接口/枚举类型/泛型
C# 面向对象编程(三)——接口/枚举类型/泛型
20 0
|
4月前
|
SQL 存储 Oracle
C#利用IDbCommand实现通用数据库脚本执行程序
C#利用IDbCommand实现通用数据库脚本执行程序
|
4月前
|
存储 SQL 数据库
C# 将 Word 转文本存储到数据库并进行管理
C# 将 Word 转文本存储到数据库并进行管理
112 2
|
4月前
|
SQL 存储 数据库连接
C#SQL Server数据库基本操作(增、删、改、查)
C#SQL Server数据库基本操作(增、删、改、查)
40 0
下一篇
云函数