因为项目需求,需要项目同时可以访问三个数据库,因此本人经过一番研究,得出以下代码。

  

1.建立公共连接抽象类(DataBase)

 public abstract class DataBase
{
/// <summary>
///
/// </summary>
public abstract string ConnectionString { get; } /// <summary>
///
/// </summary>
/// <param name="cmd"></param>
/// <param name="pName"></param>
/// <param name="value"></param>
/// <param name="type"></param>
/// <returns></returns> public DbParameter CreateParameter(DbCommand cmd, String pName, Object value, System.Data.DbType type)
{
var p = cmd.CreateParameter();
p.ParameterName = pName;
p.Value = (value == null ? DBNull.Value : value);
p.DbType = type;
return p;
}
/// <summary>
///
/// </summary>
/// <returns></returns>
public abstract DbConnection CreateConnection();
/// <summary>
/// 返回List
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="sql"></param>
/// <param name="paramObject"></param>
/// <returns></returns>
public List<T> Select<T>(string sql, Object paramObject = null)
{ try
{
using (DbConnection conn = CreateConnection())
{
conn.Open();
var list = Dapper.SqlMapper.Query<T>(conn, sql, paramObject);
return list.ToList<T>();
} }
catch (Exception ex)
{
Logs.Write(LogType.Error, ex.Message,this.GetType());
return null;
}
}
/// <summary>
/// 返回List
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="tabName">表名</param>
/// <param name="paramObject"></param>
/// <returns></returns>
public List<T> Select<T>()
{
try
{
using (DbConnection conn = CreateConnection())
{
conn.Open();
var list = Dapper.SqlMapper.Query<T>(conn, "SELECT * FROM " + typeof(T).Name, null);
return list.ToList<T>();
}
}
catch (Exception ex)
{
Logs.Write(LogType.Error, ex.Message, this.GetType());
return null;
}
}
public int Insert<T>(T t)
{
try
{
using (DbConnection conn = CreateConnection())
{
conn.Open();
var id = conn.Insert(t);
return id ?? ;
}
}
catch (Exception ex)
{
Logs.Write(LogType.Error, ex.Message, this.GetType());
return -;
}
}
public int Delete<T>(T t)
{
try
{
using (DbConnection conn = CreateConnection())
{
conn.Open();
return conn.Delete(t);
}
}
catch (Exception ex)
{
Logs.Write(LogType.Error, ex.Message, this.GetType());
return -;
}
}
public int Update<T>(T t)
{
try
{
using (DbConnection conn = CreateConnection())
{
conn.Open();
return conn.Update(t);
}
}
catch (Exception ex)
{
Logs.Write(LogType.Error, ex.Message, this.GetType());
return -;
}
}
public string InsertByGuid<T>(T t)
{
try
{
using (DbConnection conn = CreateConnection())
{
conn.Open();
return conn.Insert<string,T>(t);
}
}
catch (Exception ex)
{
Logs.Write(LogType.Error, ex.Message, this.GetType());
return "";
}
}
public List<T> GetList<T>(string sql, Object paramObject = null)
{
try
{
using (DbConnection conn = CreateConnection())
{
conn.Open();
return conn.Query<T>(sql, paramObject).ToList();
}
}
catch (Exception ex)
{
Logs.Write(LogType.Error, ex.Message, this.GetType());
return null;
}
}
public IEnumerable<dynamic> GetList(string sql, Object paramObject = null)
{
try
{
using (DbConnection conn = CreateConnection())
{
conn.Open();
return conn.Query(sql, paramObject);
}
}
catch (Exception ex)
{
Logs.Write(LogType.Error, ex.Message, this.GetType());
return null;
}
}
/// <summary>
///
/// </summary>
/// <param name="sql"></param>
/// <param name="paramObject"></param>
/// <returns></returns>
public List<dynamic> Select(string sql, Object paramObject = null)
{
DbConnection conn = null;
try
{
conn = CreateConnection();
conn.Open();
var list = Dapper.SqlMapper.Query(conn, sql, paramObject);
return list.ToList<dynamic>();
}
catch (Exception ex)
{
Logs.Write(LogType.Error, ex.Message, this.GetType());
return null;
}
finally
{
if (conn != null)
conn.Close();
}
} /// <summary>
/// 获取一条数据
/// </summary>
/// <param name="sql"></param>
/// <param name="paramObject"></param>
/// <returns></returns>
public dynamic Single(string sql, Object paramObject = null)
{
DbConnection conn = null;
try
{
conn = CreateConnection();
conn.Open();
var list = Dapper.SqlMapper.QuerySingleOrDefault<dynamic>(conn, sql, paramObject);
return list;
}
catch (Exception ex)
{
Logs.Write(LogType.Error, ex.Message, this.GetType());
return null;
}
finally
{
if (conn != null)
conn.Close();
}
} /// <summary>
/// 获取一条数据
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="sql"></param>
/// <param name="paramObject"></param>
/// <returns></returns>
public T Single<T>(string sql, Object paramObject = null)
{ DbConnection conn = null;
try
{
conn = CreateConnection();
conn.Open();
var list = Dapper.SqlMapper.QuerySingleOrDefault<T>(conn, sql, paramObject);
return list;
}
catch (Exception ex)
{
Logs.Write(LogType.Error, ex.Message, this.GetType());
return default(T);
}
finally
{
if (conn != null)
conn.Close();
}
} /// <summary>
/// 获取一行一列
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="sql"></param>
/// <param name="paramObject"></param>
/// <returns></returns>
public T ExecuteScalar<T>(string sql, Object paramObject = null)
{ DbConnection conn = null;
try
{
conn = CreateConnection();
conn.Open();
T t = Dapper.SqlMapper.ExecuteScalar<T>(conn, sql, paramObject);
return t;
}
catch (Exception ex)
{
Logs.Write(LogType.Error, ex.Message, this.GetType());
return default(T);
}
finally
{
if (conn != null)
conn.Close();
}
} /// <summary>
/// 返回受影响行数
/// </summary>
/// <param name="sql"></param>
/// <param name="paramObject"></param>
/// <returns></returns>
public int Execute(string sql, Object paramObject = null)
{
DbConnection conn = null;
try
{
conn = CreateConnection();
conn.Open();
int count = Dapper.SqlMapper.Execute(conn, sql, paramObject);
return count;
}
catch (Exception ex)
{
Logs.Write(LogType.Error, ex.Message, this.GetType());
return ;
}
finally
{
if (conn != null)
conn.Close();
}
}
}

2.建立3个不同数据库连接类(OracleDataBase、SqlDataBase、MySqlDataBase)继承(DataBase)类

 public class OracleDataBase : DataBase
{
public override string ConnectionString
{
get
{
return System.Configuration.ConfigurationManager.ConnectionStrings["OracleConnection"].ToString();
}
}
/// <summary>
/// 常用
/// </summary>
/// <returns></returns>
public override DbConnection CreateConnection()
{
Oracle.ManagedDataAccess.Client.OracleConnection conn = new Oracle.ManagedDataAccess.Client.OracleConnection(ConnectionString);
conn.ConnectionString = ConnectionString;
return null;
}
}
 public class SqlDataBase : DataBase
{
/// <summary>
///
/// </summary>
public override string ConnectionString
{
get
{
return System.Configuration.ConfigurationManager.ConnectionStrings["SqlConnection"].ToString();
}
}
/// <summary>
///
/// </summary>
/// <returns></returns>
public override DbConnection CreateConnection()
{
SqlConnection conn = new SqlConnection(ConnectionString);
conn.ConnectionString = ConnectionString;
return conn;
} }
 public  class MySqlDataBase : DataBase
{
/// <summary>
///
/// </summary>
public override string ConnectionString
{
get
{
return System.Configuration.ConfigurationManager.ConnectionStrings["MySqlConnection"].ToString();
}
}
/// <summary>
/// 常用
/// </summary>
/// <returns></returns>
public override DbConnection CreateConnection()
{
MySql.Data.MySqlClient.MySqlConnection conn = new MySql.Data.MySqlClient.MySqlConnection(ConnectionString);
return conn;
}
}

3.访问不同的连接

  public List<T> GetList<T>()
{
var db = new SqlDataBase();
return db.Select<T>();
}
public List<T> GetList<T>()
{
var db = new OracleDataBase();
return db.Select<T>();
}
public List<T> GetList<T>()
{
var db = new MySqlDataBase();
return db.Select<T>();
}

以上代码就是访问不同的数据库的列表信息,其他增删改和上面的差不多写法,如果还有其他问题,请评论!

dapper之连接数据库(Oracle,SQL Server,MySql)的更多相关文章

  1. Java与SQL Server, MySql, Oracle, Access的连接方法以及一些异常解决

    Java与SQL Server, MySql, Oracle, Access的连接方法以及一些异常解决 I. 概述 1.1 JDBC概念 JDBC(Java Database Connectivity ...

  2. 数据库管理工具神器-DataGrip,可同时管理多个主流数据库[SQL Server,MySQL,Oracle等]连接

    前言 DataGrip:Jet Brains出品的一款数据库管理工具(没错,是Jet Brains出品,必属精品).DataGrip整合集成了当前主流数据库(如:SQL Server, MySQL, ...

  3. SQL Server,MySQL,Oracle三者的区别

    SQL Server,MySQL,Oracle三者的区别 2016-10-14 转自:SQL Server,MySQL,Oracle三者的区别 目录 1 Oracle.Sql Server.MySql ...

  4. Oracle,SQL Server 数据库较MySql数据库,Sql语句差异

    原文:Oracle,SQL Server 数据库较MySql数据库,Sql语句差异 Oracle,SQL Server 数据库较MySql数据库,Sql语句差异 1.关系型数据库 百度百科 关系数据库 ...

  5. mysql,oracle,sql server数据库默认的端口号,端口号可以为负数吗?以及常用协议所对应的缺省端口号

    mysql,oracle,sql server数据库默认的端口号? mysql:3306 Oracle:1521 sql server:1433 端口号可以为负吗? 不可以,端口号都有范围的,0~65 ...

  6. 介绍几种大型的Oracle/SQL Server数据库免费版

    我们知道,Oracle和SQL Server等大型数据库也都存在一些免费的版本,这些免费的版本已经能够满足许多中小项目的需求.对于在校大学生来说,从学习的目标上来讲,安装免费版的大型数据库也就足够用了 ...

  7. SQL Server | Mysql 对表的unique 的实现方式

    在ANSI SQL 标准中unique 有两种实现方式 1.是可以插入多个空值.也就是说多个null值看成是互不相同的. 2.是只可以插入一个空值,也主是说把所有的空值看也是相同的. 在SQL Ser ...

  8. Bootstrap + AngularJS+ Ashx + SQL Server/MySQL

    去年年底12月,为适应移动端浏览需求,花了1个月时间学习Bootstrap,并将公司ASP网站重构成ASP.NET. 当时采取的网站架构: Bootstrap + jQuery + Ashx + SQ ...

  9. iBatis自动生成的主键 (Oracle,MS Sql Server,MySQL)【转】

    iBatis的sqlMap配置文件的selectKey元素有个type属性,可以指定pre或者post表示前生成(pre)还是后生成(post). Oracle设置 <!-- Oracle SE ...

  10. oracle 以及 sql server mysql 空值默认值修改

    在SQL Server Oracle MySQL当数据库中查出某值为NULL怎么办? 1.MSSQL: ISNULL() 语法 ISNULL ( check_expression , replacem ...

随机推荐

  1. Spring Cloud 负载均衡初体验

    目录 服务搭建 1.注册中心--Eureka Server 2.服务提供方--Service Provider 3.服务消费方--Service Consumer 服务消费 Feign 与断路器 Hy ...

  2. 查看mysql中的用户和密码

    use mysql; select host,user,password from user; 设置密码 set password for root@localhost=password('root' ...

  3. Mach-O在内存中符号表地址、字符串表地址的计算

    KSCrash 是一个用于 iOS 平台的崩溃捕捉框架,最近读了其部分源码,在 KSDynamicLinker 文件中有一个函数,代码如下: /** Get the segment base addr ...

  4. Java线程池基础

    目录: 一.线程池概述 二.线程池参数 三.线程池的执行过程 四.线程池的主要实现 五.线程池的使用 六.线程池的正确关闭方式 七.线程池参数调优 一.线程池概述 1.线程池类 目前线程池类一般有两个 ...

  5. 品Spring:负责bean定义注册的两个“排头兵”

    别看Spring现在玩的这么花,其实它的“筹码”就两个,“容器”和“bean定义”. 只有先把bean定义注册到容器里,后续的一切可能才有可能成为可能. 所以在进阶的路上如果要想走的顺畅些,彻底搞清楚 ...

  6. CF #579 (Div. 3) B.Equal Rectangles

    B.Equal Rectangles time limit per test2 seconds memory limit per test256 megabytes inputstandard inp ...

  7. Spring Cloud系列之Eureka服务治理

    写在前面 Spring Cloud Eureka是基于Netflix Eureka做的二次封装.主要包含两部分: 服务注册中心 eureka server 服务提供者 eureka client ps ...

  8. 规则引擎 - drools 使用讲解(简单版) - Java

    drools规则引擎 项目链接 现状: 运维同学(各种同学)通过后台管理界面直接配置相关规则,这里是通过输入框.下拉框等完成输入的,非常简单: 规则配置完毕后,前端请求后端,此时服务端根据参数(即规则 ...

  9. 【干货总结】:可能是史上最全的MySQL和PGSQL对比材料

    [干货总结]:可能是史上最全的MySQL和PGSQL的对比材料 运维了MySQL和PGSQL已经有一段时间了,最近接到一个数据库选型需求,于是便开始收集资料整理了一下,然后就有了下面的对比表 关键词: ...

  10. 鱼和熊掌可兼得?一文看懂又拍云 SCDN

    转眼已是 9102 年,参与工作多年的二狗子凭借他聪明的脑瓜和孜孜不倦的钻研精神,成为了某中型企业的资深网站管理员.不同于一般的"网管",二狗子自然是业内最优秀的那一类. 但是,最 ...