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

  

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. [Design Patterns] 01. Creational Patterns - Abstract Factory

    设计模式是一套被反复使用.多数人知晓的.经过分类编目的.代码设计经验的总结,使用设计模式的目的是提高代码的可重用性,让代码更容易被他人理解,并保证代码可靠性.它是代码编制真正实现工程化. 四个关键元素 ...

  2. [DE] ML on Big data: MLlib

    Pipeline的最终目的就是学会Spark MLlib,这里先瞧瞧做到心里有数:知道之后要学什么,怎么学. 首要问题 一.哪些机器学习算法可以并行实现? 四类算法:分类.回归.聚类.协同过滤 以及特 ...

  3. jquery让form表单异步提交

    1.监听表单提交事件,并阻止表单提交 $("form").submit(function(e) { return false;//阻止表单提交 }) 2.拿到表单内容 let da ...

  4. Java秒杀系统优化的工程要点

    这篇博客是笔者学习慕课网若鱼老师的<Java秒杀系统方案优化 高性能高并发实战>课程的学习笔记.若鱼老师授课循循善诱,讲解由浅入深,欢迎大家支持. 本文记录课程中的注意点,方便以后code ...

  5. python,json解析字符串时ValueError: Expecting property name enclosed in double quotes: line 1 column 2 (char 1)

    今天写测试工具的时候,去excel取数据,用json解析字符串为字典时报错,后经调试,发现是单引号的原因,将单引号换位双引号即可 def getExcelValue_to_dic(filepath): ...

  6. C语言入门-函数

    一.初见函数 求出1到10.20到30和35到45的三个的和 #include <stdio.h> // 定义一个函数 void sum(int begin, int end) { int ...

  7. html盒模型基础

    盒模型              概念:如果CSS对HTML文档元素生成了该元素在HTML文档布局中占据空间的矩形元素框(element box),称盒子             通过一系列定义盒子的 ...

  8. awk 命令使用

    awk命令就是把文件逐行的读入,以空格为默认分隔符将每行切片,切开的部分再进行各种分析处理.例如: awk -F '/' '{print $NF}' tmp/file.txt 该命令用于读取file. ...

  9. 一台机器上搭建多个redis实例的配置文件修改部分

    1.单个redis服务搭建请参考:redis服务搭建 2.一台Redis服务器,分成多个节点,每个节点分配一个端口(6380,6381…),默认端口是6379. 每个节点对应一个Redis配置文件,如 ...

  10. 链表常见的题型(java实现)

    链表是面试中最常见的一种题型,因为他的每个题的代码短,短短的几行代码就可以体现出应聘者的编码能力,所以它也就成为了面试的重点. 链表常见的操作有1.打印链表的公共部分,2.删除链表的倒数第K个节点,3 ...