1.为什么选择Dapper

1)轻量。

2)速度快。Dapper的速度接近与IDataReader,取列表的数据超过了DataTable。

3)支持多种数据库。Dapper可以在所有Ado.net Providers下工作,包括sqlite, sqlce, firebird, oracle, MySQL, PostgreSQL and SQL Server

4)可以映射一对一,一对多,多对多等多种关系。

5)性能高。通过Emit反射IDataReader的序列队列,来快速的得到和产生对象,性能不错。

6)支持FrameWork2.0,3.0,3.5,4.0,4.5

7)Dapper语法十分简单。并且无须迁就数据库的设计

2.使用教程

1)在配置文件web.config中添加连接字符串

  <connectionStrings>
<add name="sqlconnectionString" connectionString="server=127.0.0.1;database=MyDataBase;User=sa;password=123456;Connect Timeout=1000000"/>
<add name="mysqlconnectionString" connectionString="Database=hyd;Data Source=127.0.0.1;User Id=root;Password=root;CharSet=utf8;port=3306"/>
</connectionStrings>

2)获取连接数据库对象

获取Sql Server的连接数据库对象:SqlConnection

public static SqlConnection SqlConnection()
{
string sqlconnectionString = ConfigurationManager.ConnectionStrings["sqlconnectionString"].ToString();
var connection = new SqlConnection(sqlconnectionString);
connection.Open();
return connection;
}

 获取MySql的连接数据库对象:MySqlConnection

     public static MySqlConnection MySqlConnection()
{
string mysqlconnectionString = ConfigurationManager.ConnectionStrings["mysqlconnectionString"].ToString();
var connection = new MySqlConnection(mysqlconnectionString);
connection.Open();
return connection;
}

封装

public class DapperService
{
public static SqlConnection SqlConnection()
{
string sqlconnectionString = ConfigurationManager.ConnectionStrings["sqlconnectionString"].ToString();
var connection = new SqlConnection(sqlconnectionString);
connection.Open();
return connection;
}
public static MySqlConnection MySqlConnection()
{
string mysqlconnectionString = ConfigurationManager.ConnectionStrings["mysqlconnectionString"].ToString();
var connection = new MySqlConnection(mysqlconnectionString);
connection.Open();
return connection;
}
}

3)实体类

   public class Users
{
public int ID { get; set; }//自增主键
public string Name { get; set; }
public int Age { get; set; }
}

4)增删改查

        //增
using (IDbConnection conn = DapperService.MySqlConnection())
{
Users user = new Users();
user.Name = "CNKI";
user.Age = 38;
string sqlCommandText = @"INSERT INTO USERS(Name,Age)VALUES(@Name,@Age)";
int result = conn.Execute(sqlCommandText, user);
}
//批量增
using (IDbConnection conn = DapperService.MySqlConnection())
{
List<Users> list = new List<Users>();
for (int i = 0; i < 5; i++)
{
Users user = new Users();
user.Name = "CNKI";
user.Age = 38;
list.Add(user);
}
string sqlCommandText = @"INSERT INTO USERS(Name,Age)VALUES(@Name,@Age)";
int result = conn.Execute(sqlCommandText, list);
}
//删
using (IDbConnection conn = DapperService.MySqlConnection())
{
Users user = new Users();
user.ID = 1;
string sqlCommandText = @"DELETE FROM USERS WHERE ID=@ID";
int result = conn.Execute(sqlCommandText, user);
}
//改
using (IDbConnection conn = DapperService.MySqlConnection())
{
Users user = new Users();
user.ID = 2;
user.Name = "CNKI";
user.Age = 18;
string sqlCommandText = @"UPDATE USERS SET Age=@Age WHERE ID=@ID";
int result = conn.Execute(sqlCommandText, user);
}
//查
using (IDbConnection conn = DapperService.MySqlConnection())
{
string sqlCommandText = @"SELECT * FROM USERS WHERE ID=@ID";
Users user = conn.Query<Users>(sqlCommandText, new { ID=2 }).FirstOrDefault();
}
//分页
using (IDbConnection conn = DapperService.MySqlConnection())
{
int pageIndex = 0;
int pageSize = 2;
string sqlCommandText = string.Format(@"SELECT * FROM USERS  LIMIT {0},{1} ", pageIndex * pageSize, pageSize);
List<Users> user = conn.Query<Users>(sqlCommandText).ToList();
}

3.防止Sql注入

           using (IDbConnection conn = DapperService.MySqlConnection())
{
string sqlCommandText = @"SELECT * FROM USER WHERE ID=@ID";
var p = new DynamicParameters();
p.Add("@ID", 1);
User user2 = conn.Query<User>(sqlCommandText,p).FirstOrDefault();
}

这要用到了Dapper的DynamicParameters动态参数集合类,从上面可以看到可以能过Add方法加入参数。最后通过conn.Query<MSys_Admin>(sqlText, p)执行sql,,返回结果。因为用的是命令参数的形式,让sql注入无机可乘,所以这种方案是安全的。

4.操作事物

 [TestMethod]
public void TestDapperTransaction()
{
using (var conn = new MySql.Data.MySqlClient.MySqlConnection("server=localhost;User Id=root;password=root;Database=test"))
{
conn.Open();
IDbTransaction trans = conn.BeginTransaction();
int row = conn.Execute(@"update t set name='www.lanhusoft.com' where id=@id", new { id = }, trans);
row += conn.Execute("delete from t where id=@id", new { id = }, trans);
for (int i = ; i < ; i++)
{
conn.Execute(@"insert t(id, name) values (@id, @name)", new { id = i, name = "www.lanhusoft.com/" + i });
}
trans.Commit();
conn.Close();
}
}

ORM之Dapper操作Sql Server和MySql数据库的更多相关文章

  1. Dapper操作Sql Server和MySql数据库

    1. 在配置文件web.config中添加连接字符串 <connectionStrings> <add name="sqlconnectionString" co ...

  2. SQL Server和MySQL数据库

    导读:接下来的网上商城的项目,需要用到MySQL数据库了.这个对于我来说,是一个新接触的东西,按照惯例,在刚开始学习一个东西的时候,先从宏观上去了解它.本篇博客,先介绍SQL Server的基本内容, ...

  3. SQL Server 对接MySQL 数据库

    1.在SQL SERVER服务器上安装MYSQL ODBC驱动; 驱动下载地址:http://dev.mysql.com/downloads/connector/odbc/ 2.安装好后,在管理工具- ...

  4. 使用records库操作SQL并且查询MySQL数据库

    获取数据库 db = records.Database('mysql://root:xxxx@47.106.151.165/web_table?charset=utf8')注释:xxxx为数据密码 执 ...

  5. 代码生成器Sql Server 和 Mysql 数据库脚本

    经常用到代码生成器,对于取数据脚本做个记录: #region SQL-SqlServer private string SqlTableList = @"SELECT so.name, Co ...

  6. 对Oracle 、SQL Server、MySQL、PostgreSQL数据库优缺点分析

    对Oracle .SQL Server.MySQL.PostgreSQL数据库优缺点分析 Oracle Database Oracle Database,又名Oracle RDBMS,或简称Oracl ...

  7. 从SQL Server到MySQL,近百亿数据量迁移实战

    从SQL Server到MySQL,近百亿数据量迁移实战 狄敬超(3D) 2018-05-29 10:52:48 212 沪江成立于 2001 年,作为较早期的教育学习网站,当时技术选型范围并不大:J ...

  8. sql server vs mysql

    1.中文: my.ini [mysqld] character-set-server=utf8 character-set-client=utf8 data\testdb\db.opt default ...

  9. Python 学习笔记:Python 操作 SQL Server 数据库

    最近要将数据写到数据库里,学习了一下如何用 Python 来操作 SQL Server 数据库. 一.连接数据库: 首先,我们要连接 SQL Server 数据库,需要安装 pymssql 这个第三方 ...

随机推荐

  1. Android 媒体键监听以及模拟媒体键盘的实现 demo

    有时我们需要程序模拟按钮或点击,而手机本身又没有,哪么可以采取其它方式 模拟实现,最后再去实际设备去测试(前期一般都拿不到设备): 如上一首,下一首,暂停等,手机上是没有的,但有些设备上是有的,所以我 ...

  2. 【转贴】全站 HTTPS 来了

    http://geek.csdn.net/news/detail/48765 作者:腾讯TEG架构平台部静态加速组高级工程师 刘强 最近大家在使用百度.谷歌或淘宝的时候,是不是注意浏览器左上角已经全部 ...

  3. EasyUI datagrid组件绑定有转义字符的json数据出错

    最近项目中一个页面的datagrid出现了莫名其妙的问题, 首先是分页数据的第二页和第三页不能展示,过了一天后第一页也出不来了, 默认首页不出来导致后续分页处理无法进行, 整个数据都不出来了,最后只能 ...

  4. 【程序与资源】linux程序与资源管理

    程序与资源管理:ps.top.free.sar.kill.uname ①ps语法: [root @test /root ]# ps -aux 参数说明: a   :选择所有的程序列出 u   :所有使 ...

  5. Ext.Net 破解

    在使用 Ext.Net 框架时,如果没有得到正版授权(安装密钥),在站点发布后,打开界面总是弹出一个窗口,提示没有授权,看着都头疼,难道一定要安装密钥吗?但还是有办法解决的,在研究时发现,页面中多了两 ...

  6. 讲解DLL内容的比较详细的站点

    1.通过 Visual Studio 2008 用C语言创建和调用DLL : http://blog.chinaunix.net/uid-631975-id-116622.html 2.DLL(Dyn ...

  7. C++断言与静态断言

    断言是很早之前就有的东西了,只需要引入cassert头文件即可使用.往往assert被用于检查不可能发生的行为,来确保开发者在调试阶段尽早发现“不可能”事件真的发生了,如果真的发生了,那么就表示代码的 ...

  8. Sql server 数据库 int 和guid 两者的比较

    我们公司的数据库全部是使用GUID做主键的,很多人习惯使用int做主键.所以呢,这里总结一下,将两种数据类型做主键进行一个比较. 使用INT做主键的优点: 1.需要很小的数据存储空间,仅仅需要4 by ...

  9. linux 下安装 搭建 svn服务器

    1.下载svn http://subversion.apache.org/download 下载完成后解压,执行 ./configure --prefix=/usr/svn 提示 configure: ...

  10. Linux之档案管理

    1:档案类型[1] d :目录 -:档案 l:链接档 b:装置文件中可存储接口设备 c:装置文件中串行设备,例如:键盘,鼠标 2:RWX: R:read (可读),W:write(可写),X:excu ...