C# Dapper:实战增删查改与事务处理
C# Dapper 是一个轻量级的 ADO.NET 封装库,它简化了与 SQL 数据库进行交互的过程,特别适合那些需要高效执行数据库操作且不希望编写大量 ORM(对象关系映射)代码的开发者。在 C# 中使用 Dapper,我们可以直接操作数据库,避免了 ORM 框架带来的复杂性,提高了代码的简洁性和执行效率。 插入操作: 通过 Dapper,我们可以使用 IDbConnection 对象的 Execute 方法执行 SQL 插入语句。例如,创建一个新的 SqlConnection 对象并设置连接字符串后,可以像下面这样插入数据: ```csharp IDbConnection conn = new SqlConnection(connString); string sql = "insert into book (name) values (@name)"; conn.Execute(sql, book); // 或者使用匿名对象的方式 ``` 这里,`@name` 是参数占位符,Dapper 会自动将 `book` 对象的 `name` 属性值绑定到参数中。 更新操作: 更新操作同样简单,使用 Execute 方法配合参数: ```csharp string sql = "update book set name = @name where id = @id"; conn.Execute(sql, new { id = book.id, name = book.name }); ``` 或者直接使用对象属性: ```csharp conn.Execute(sql, book); ``` 删除操作: 删除操作类似,使用参数化查询: ```csharp string sql = "delete from book where id = @id"; conn.Execute(sql, new { id = book.id }); ``` 查询操作: 对于查询操作,Dapper 提供了 Query 方法,它可以返回列表、单个对象或自定义的泛型结果。无参数查询: ```csharp string sql = "select * from book"; var books = conn.Query<book>(sql).ToList(); ``` 如果有参数,可以传递匿名对象或预先创建好的对象: ```csharp book bookResult = conn.Query<book>(sql, new { id = someId }).SingleOrDefault(); ``` 关联查询(JOIN): 在需要执行关联查询时,Dapper 支持 Lambda 表达式来处理结果集。例如,查询一个图书及其对应的书评: ```csharp string sql = "select * from book b inner join book_review br on br.book_id = b.id where b.id = @id"; book lookup = null; var result = conn.Query<book, bookreview, book>(sql, (b, br) => { if (lookup == null || lookup.id != b.id) { lookup = b; } if (br != null) { lookup.reviews.Add(br); } return lookup; }, new { id = someId }); ``` 这段代码中,`lookup` 变量用于存储结果集中的第一条记录,当遇到不同的 ID 或非空书评时,会添加到 `lookup` 的 `reviews` 列表中,最后返回一个包含关联数据的 `book` 对象。 总结来说,C# Dapper 通过简化 SQL 语句编写和参数绑定,提供了快速、直接操作数据库的能力,尤其适合对性能有较高要求的场景。通过了解和熟练使用 Dapper,开发者可以编写出更易读、高效的代码。
IDbConnection conn = new SqlConnection(connString);
//Insert
string sql="insert into book(name) values(@name)";
conn.Execute(sql,book);
//或
conn.Execute(sql,new{name=name});
//update
string sql="update book set name=@name where id=@id";
conn.Execute(sql,book);
//或
conn.Execute(sql,new{id=id,name=name});
//delete
string sql="delete from book where id=@id";
conn.Execute(sql,book);
//或
conn.Execute(sql,new{id=id});
//select
//query
string sql="select * from book";
//无参数查询,返回列表,带参数查询和之前的参数赋值法相同。
conn.Query<book>(query).ToList();
//返回单条信息
string sql="select * from book where id=@id";
下载后可阅读完整内容,剩余2页未读,立即下载
- 粉丝: 3
- 资源: 34
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- C++标准程序库:权威指南
- Java解惑:奇数判断误区与改进方法
- C++编程必读:20种设计模式详解与实战
- LM3S8962微控制器数据手册
- 51单片机C语言实战教程:从入门到精通
- Spring3.0权威指南:JavaEE6实战
- Win32多线程程序设计详解
- Lucene2.9.1开发全攻略:从环境配置到索引创建
- 内存虚拟硬盘技术:提升电脑速度的秘密武器
- Java操作数据库:保存与显示图片到数据库及页面
- ISO14001:2004环境管理体系要求详解
- ShopExV4.8二次开发详解
- 企业形象与产品推广一站式网站建设技术方案揭秘
- Shopex二次开发:触发器与控制器重定向技术详解
- FPGA开发实战指南:创新设计与进阶技巧
- ShopExV4.8二次开发入门:解决升级问题与功能扩展