Dapepr讲解

  1. 上篇文章我们介绍了,什么是Dapepr,有什么好处,性能的对比,还有多表多数据添加操作(事务的封装)等等。本篇文章我们继续讲解。。。。。如果本篇文章看不懂,请看我上一篇文章:Dapeper的入门
  2. Select查询
  3. 1、首先我们先在SQLMapperQueryMultiple()方法,在梳理Dapper中无意中发现,个人感觉不错,
  1. //
  2. // 摘要:
  3. // Execute a command that returns multiple result sets, and access each in turn:
    // 上句话的翻译是: 执行一个返回多个结果集的命令,并依次访问每个结果集
  4. public static SqlMapper.GridReader QueryMultiple(this IDbConnection cnn, CommandDefinition command);
  5. //
  6. // 摘要:
  7. // Execute a command that returns multiple result sets, and access each in turn
  8. public static SqlMapper.GridReader QueryMultiple(this IDbConnection cnn, string sql, object param = null, IDbTransaction transaction = null,
    int? commandTimeout = null, CommandType? commandType = null);
  9. //
  10. // 摘要:
  11. // Execute a command that returns multiple result sets, and access each in turn
  12. public static Task<SqlMapper.GridReader> QueryMultipleAsync(this IDbConnection cnn, CommandDefinition command);
  13. //
  14. // 摘要:
  15. // Execute a command that returns multiple result sets, and access each in turn
  16. public static Task<SqlMapper.GridReader> QueryMultipleAsync(this IDbConnection cnn, string sql, object param = null,
    IDbTransaction transaction = null, int? commandTimeout = null, CommandType? commandType = null);

2、老规矩我们在DapperDBContext 中加个方法,我们可以根据不同业务扩展方法,

  1.  
  1. /// <summary>
  2. /// WueryMultiplie 执行一个返回多个结果集的命令,并依次访问每个结果集
  3. /// </summary>
  4. /// <param name="sql"></param>
  5. /// <param name="param"></param>
  6. /// <param name="transaction"></param>
  7. /// <param name="commandTimeout"></param>
  8. /// <param name="commandType"></param>
  9. /// <param name="databaseOption"></param>
  10. /// <returns></returns>
  11. public static Dapper.SqlMapper.GridReader QueryMultiple(string sql, object param = null, IDbTransaction transaction = null, int? commandTimeout = null,
    CommandType? commandType = null, int databaseOption = )
  12. {
  13. var conn = ConnectionFactory.MySqlConnection();
  14. var sw = new Stopwatch(); sw.Start();
  15. try
  16. {
  17. // 因为using 的作用域之后,连接自动关闭,
  18. //这里需要说明的是,在数据读取完毕之后,不再需要SqlDataReader时,必须将其进行手动关闭
  19. var restult = conn.QueryMultiple(sql, param, transaction, commandTimeout, commandType);
  20. sw.Stop();
  21. return restult;
  22. }
  23. catch (Exception ex)
  24. {
  25. LogHelper.ErrorLog(ex.ToString());
  26. throw new Exception(ex.ToString());
  27. }
  28. }
  1.  

注意事项:不知道你在上面代码中有没有遇到一个问题,上篇文章我们封装用到using,这次没有用到,是因为封装过程报错:报错:“阅读器关闭时尝试调用 Read 无效” ,原因也很简单:因为using 的作用域之后,连接自动关闭,这里需要说明的是,在数据读取完毕或者不再需要SqlDataReader时,必须将其进行手动关闭。

3、SQL调用

  1. /// <summary>
  2. /// 单表查数据
  3. /// </summary>
  4. /// <returns></returns>
  5. public List<Department> select()
  6. {
  7. string sql = @"select *from Department";
  8. var list = DapperDBContext.Query<Department>(sql, null).ToList();
    //(多个结果集)为了比较就写一起
  9. var all = selectAll();
  10. var dep = all.Read<Department>().ToList();
  11. var auth = all.Read<AuthResources>().ToList();
  12. return list;
  13. }
  14.  
  15. /// <summary>
  16. /// 多个结果集
  17. /// </summary>
  18. /// <returns></returns>
  19. public Dapper.SqlMapper.GridReader selectAll()
  20. {
  21. var sql = "select * from Department; select * from AuthResources";
  22. var multiReader = DapperDBContext.QueryMultiple(sql);
  23. return multiReader;
  24. }

效果:

  1.  
  • 博主是利用读书、参考、引用、复制和粘贴等多种方式打造成自己的纯镀 24k 文章,请原谅博主成为一个无耻的文档搬运工!
  • 小弟刚迈入博客编写,文中如有不对,欢迎板砖扶正,希望对你有所帮助。

Dapper系列之二:Dapper的事务查询的更多相关文章

  1. CRL快速开发框架系列教程二(基于Lambda表达式查询)

    本系列目录 CRL快速开发框架系列教程一(Code First数据表不需再关心) CRL快速开发框架系列教程二(基于Lambda表达式查询) CRL快速开发框架系列教程三(更新数据) CRL快速开发框 ...

  2. Dapper系列之三:Dapper的事务修改与删除

    Dapepr的Update和Delete Dapper入门Dapper查询 上两篇文章我们介绍Dapper中添加和查询.本篇文章我们继续讲解修改和删除....如果本篇文章看不懂,请看阅读上两篇Dapp ...

  3. MySQL系列(二)---MySQL事务

    MySql 事务 目录 MySQL系列(一):基础知识大总结 MySQL系列(二):MySQL事务 什么是事务(transaction) 保证成批操作要么完全执行,要么完全不执行,维护数据的完整性.也 ...

  4. Dapper系列之一:Dapper的入门(多表批量插入)

    Dapper介绍  简介:      不知道博客怎么去写去排版,查了好多相关博客,也根据自己做过项目总结,正好最近搭个微服务框架,顺便把搭建微服务框架所运用的知识都进行博客梳理,为了以后复习,就仔细琢 ...

  5. NHibernate系列文章二十三:NHibernate查询之Criteria查询(附程序下载)

    摘要 上一篇文章介绍了NHibernate HQL,他的缺点是不能够在编译时发现问题.如果数据库表结构有改动引起了实体关系映射的类有改动,要同时修改这些HQL字符串.这篇文章介绍NHibernate面 ...

  6. Dapper总结(二)---事务和存储过程

    一  dapper使用事务 string sql1 = "insert into UserInfo values('user8',27,'s')"; string sql2 = & ...

  7. C# 数据操作系列 - 18 让Dapper更强的插件

    0. 前言 在前一篇中我们讲到了Dapper的应用,但是给我们的感觉Dapper不像个ORM更像一个IDbConnection的扩展.是的,没错.在实际开发中我们经常用Dapper作为对EF Core ...

  8. ORM系列之三:Dapper

    目录 1.Dapper 简介 2.Dapper 安装 3.Dapper 使用 Dapper简介 Dapper是一个轻量级的ORM框架,短小精悍,正如其名.对于小项目,使用EF,NHibernate这样 ...

  9. Oracle 学习系列之二(会话与事务级临时表和dual表 )

    一. 会话临时表 --创建会话临时表create global temporary table tmp_user_session(user_id int, user_name varchar2(20) ...

随机推荐

  1. noi2014魔法森林

    为了得到书法大家的真传,小 E 同学下定决心去拜访住在魔法森林中的隐 士.魔法森林可以被看成一个包含

  2. flywaydb and sql server

    https://flywaydb.org/documentation/database/sqlserver How Flyway works https://flywaydb.org/getstart ...

  3. MYSQL初级学习笔记八:MySQL中常用的函数!(视频序号:初级_45-50)

    知识点十:MySQL中的函数(45-50) 数学函数: 名称 描述 CEIL() 进一取整 FLOOR() 舍一取整 MOD 取余数(取摸) POWER() 幂运算 ROUND() 四舍五入 TRUN ...

  4. poj 2923 Relocation 解题报告

    题目链接:http://poj.org/problem?id=2923 题目意思:给出两部卡车能装的最大容量,还有n件物品的分别的weight.问以最优方式装入,最少能运送的次数是多少. 二进制表示物 ...

  5. 第六届蓝桥杯C++B组省赛

    1.奖券数目 2.星系炸弹 3.三羊献瑞 4.格子中输出 5.九数组分数 6.加法变乘法 7.牌型种数 8.移动距离 9.垒骰子 10.生命之树 1.奖券数目 奖券数目有些人很迷信数字,比如带“4”的 ...

  6. zoj 3204 Connect them(最小生成树)

    题意:裸最小生成树,主要是要按照字典序. 思路:模板 prim: #include<iostream> #include<stdio.h> #include<string ...

  7. I.MX6 2G DDR3 16G eMMC

    /************************************************************************* * I.MX6 2G DDR3 16G eMMC ...

  8. Android控件大全(四)——CoordinatorLayout

    CoordinatorLayout 其实就是个高级的FrameLayout,用于协调子布局要使用该控件,需要再gradle中加入: compile 'com.android.support:desig ...

  9. Swift3.0 控制流

    常用的一些判断方式 //for in let numberList = [, , , , ] //获取第一个元素 !拆包 print(numberList.first!)//1 //获取最后一个元素 ...

  10. DLL分配的内存如何在EXE里面释放

    总结下面几个要点: 1. 保证内存分配和清除的统一性:如果一个DLL提供一个能够分配内存的函数,那么这个DLL同时应该提供一个函数释放这些内存.数据的创建和清除应该在同一个层次上. 曾经遇到过这样的例 ...