dapper mysql 预处理_dapper操作连接mysql开发最完整实例总结

本文详细介绍了如何使用Dapper与MySQL进行数据库操作,包括连接配置、预处理参数、增删查改及事务处理。通过示例代码展示了Dapper在MySQL中的常见用法,强调了与SQL Server的差异,如非真正参数化可能导致的安全风险等。
摘要由CSDN通过智能技术生成

之前有写过dapper的介绍,但是今天主要来讲解一下dapper怎么使用mysql数据库开发并列举一些常用的用法。

dapper版本:1.42

比起dapper使用sql server,dapper下的mysql就显得麻烦一些,毕竟微软要想保护下自己的sql server而把mysql看成外来媳妇,所以要使dapper能够连接mysql必须要从mysql官网中下载.net的驱动。

下载下来是一个.msi安装文件,点击安装就ok了。到时在你的安装目录就有对应的dll文件了,这些dll可以拷贝到其它机器,或者在项目中引用就可以了,这样可以避免重复安装。(我的安装路径为:C:\Program Files (x86)\MySQL\MySQL Connector Net 6.9.8\)会有一个Assemblies目录。

257293f5ffa35eb9f1dad1dce776120c.gif

里面有多个版本的驱动,根据自己开发版本选择自己相应的驱动版本。v4.5下面有以下dll。

f27f4fc4df49e43582bb3c357b1992fb.gif

第一个dll,“MySql.Data.dll”就是我们要找的dll了。在项目引用这个dll文件并引用dapper的dll。

下面就来看看dapper连接mysql具体的增、查、改、删的代码。

一、准备测试表

创建一个mysql测试表和model

public class UserInfo

{

public int id { get; set; }

public string name { get; set; }

}

create table t

(

id int,

name varchar(50)

);

二、返回dynamic类型的集合

[TestMethod]

public void TestQueryReturnDynamic()

{

IEnumerable list;

using (var conn = new MySql.Data.MySqlClient.MySqlConnection("server=localhost;User Id=root;password=root;Database=test"))

{

list = conn.Query("select * from t");

conn.Close();

}

}

默认dapper查询返回的就是IEnumberable的。

注意:在使用dapper必须要添加对Dapper命名空间的引用

using Dapper;

三、查询数据并返回List集合

[TestMethod]

public void TestQueryListAll()

{

List list;

using (var conn = new MySql.Data.MySqlClient.MySqlConnection("server=localhost;User Id=root;password=root;Database=test"))

{

list = conn.Query("select * from t").AsList();

conn.Close();

}

}

四、通过参数化查询

[TestMethod]

public void TestQueryByParams()

{

IEnumerable list;

using (var conn = new MySql.Data.MySqlClient.MySqlConnection("server=localhost;User Id=root;password=root;Database=test"))

{

list = conn.Query("select * from t where id>@id", new { id = 1 });

conn.Close();

}

}

五、查询返回一个对象model

[TestMethod]

public void TestGetModelByID()

{

try

{

UserInfo m;

using (var conn = new MySql.Data.MySqlClient.MySqlConnection("server=localhost;User Id=root;password=root;Database=test"))

{

conn.Open();

var result = conn.Query("select * from t where id=@id", new { id = 2 }).AsList();

if (result.Count > 0)

m = result[0];

conn.Close();

}

}

catch (Exception ex)

{

throw ex;

}

}

注意:dapper连接mysql参数还是用@开头,但是不像sql server那样真正的参数化达到防止sql注入的危险。我们可以试试把上面执行语句改一下,报的错可以给出我们提示:

1、不给参数对像

var result = conn.Query("select * from t where id=@id").AsList();

错误信息:

Fatal error encountered during command execution.

2、把where去掉

var result = conn.Query("select * from t  id=@id", new { id = 2 }).AsList();

错误如下:

You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '=2' at line 1

千万要注意:可以看到其实在执行sql命令之前进行了一次sql拼接,所以还要自己之前要做好防注入的检查,这一点还是不如sql server。

六、批量插入数据,插入一个集合。

[TestMethod]

public void TestInsertBatch()

{

using (var conn = new MySql.Data.MySqlClient.MySqlConnection("server=localhost;User Id=root;password=root;Database=test"))

{

conn.Open();

var r = conn.Execute(@"insert t(id, name) values (@id, @name)",

new[] {

new { id = 1, name = "lanhusoft1"}

, new { id = 2, name = "lanhusoft2"}

, new { id = 3, name = "lanhusoft3"}

});

conn.Close();

}

}

七、更新数据

[TestMethod]

public void TestUpdate()

{

using (var conn = new MySql.Data.MySqlClient.MySqlConnection("server=localhost;User Id=root;password=root;Database=test"))

{

conn.Open();

var r = conn.Execute(@"update t set name='www.lanhuseo.com' where id=@id", new { id = 3 });

conn.Close();

}

}

八、dapper使用mysql的事务

[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 = 3 }, trans);

row += conn.Execute("delete from t where id=@id", new { id = 5 }, trans);

for (int i = 0; i < 100; i++)

{

conn.Execute(@"insert t(id, name) values (@id, @name)", new { id = i, name = "www.lanhusoft.com/" + i });

}

trans.Commit();

conn.Close();

}

}

九、删除数据

[TestMethod]

public void TestDelete()

{

using (var conn = new MySql.Data.MySqlClient.MySqlConnection("server=localhost;User Id=root;password=root;Database=test"))

{

conn.Open();

var r = conn.Execute("delete from t where id=@id", new { id = 5 });

conn.Close();

}

}

总结:

dapper使用mysql开发区别不是很大,主要有以下几点:

1、连接对象要使用MySqlConnection,这个类在MySql.Data.dll中。

2、数据库连接字符串有点不一样

3、dapper查询返回List集合要使用AsList()方法,而且对linq支持没有sql server好。

4、参数虽然也是通@开头,但是不是真正意义的Command,而是拼接sql。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值