【C#/.NET】Dapper使用QueryMultipleAsync执行多条SQL

这篇具有很好参考价值的文章主要介绍了【C#/.NET】Dapper使用QueryMultipleAsync执行多条SQL。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

 目录

 文章来源地址https://www.toymoban.com/news/detail-477026.html

背景

解决方案

总结


 

背景

        对于查询数据列表的功能,需要分页已经查询总数。这里涉及两句SQL,一个是查询分页对应的数据,第二个是Count(*); 会导致部分重复代码和两次的数据库查询。

 

解决方案

        Dapper有封装QueryMultipleAsync的异步方法支持执行多条SQL,来减少数据库查询次数。

使用方法

 public async Task<(IEnumerable<Log> list,int total)> GetListAsync()
    {
        string sql = @"SELECT sql_calc_found_rows id, mark1, mark2, mark3  
                       FROM logs ORDER BY id ASC  LIMIT @Offset, @PageSize;
                       SELECT FOUND_ROWS()  ";
        DynamicParameters parameters = new DynamicParameters();
        parameters.Add("@Offset", 0);
        parameters.Add("@PageSize", 2);

        using var connection = _dapperContext.CreateConnection();
        using var multi = await connection.QueryMultipleAsync(sql, parameters);
        var list = await multi.ReadAsync<Log>();
        var total = await multi.ReadSingleAsync<int>();
        return (list, total);
    }

 

【C#/.NET】Dapper使用QueryMultipleAsync执行多条SQL

        这里是查询MYSQL,使用了sql_calc_found_rows在第一个查询分页数据的SQL中,第二条是SELECT FOUND_ROWS()来获取Limit之外的行数。

        使用QueryMultipleAsync方法返回的是一个GridReader对象。这个对象提供了一些方法读取数据,比如

ReadReadAsync 返回可枚举的动态类型
Read<T>ReadAsync<T> 返回 T 参数指定类型的枚举
ReadFirstReadFirstAsync Returns the first row as a dynamic type
ReadFirst<T>ReadFirstAsync<T> 将第一行作为动态类型返回
ReadFirstOrDefaultReadFirstOrDefaultAsync 返回第一行作为 T 类型参数指定类型的实例
ReadFirstOrDefault<T>ReadFirstOrDefaultAsync<T> 将第一行作为动态类型返回,如果未返回任何结果,则返回 null
ReadSingleReadSingleAsync 返回第一行作为 T 类型参数指定类型的实例,如果没有返回结果则返回 null
ReadSingle<T>ReadSingleAsync<T> 在预期只返回一行时使用。 返回动态类型
ReadSingleOrDefaultReadSingleOrDefaultAsync 在预期返回零行或一行时使用。 返回动态类型或 null
 

        示例中使用ReadAsync读取数据,ReadSingleAsync读取count然后返回元组

var list = await multi.ReadAsync<Log>();
var total = await multi.ReadSingleAsync<int>();
return (list, total);
【C#/.NET】Dapper使用QueryMultipleAsync执行多条SQL

总结

        通过使用Dapper的QueryMultipleAsync一次性查询多个结果,减少了与数据库服务器的请求次数。减少了代码量。

 

 

 

 

到了这里,关于【C#/.NET】Dapper使用QueryMultipleAsync执行多条SQL的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • docker ENTRYPOINT 执行多条命令

    如何在docker里面同时启动多个pm2进程_祥仔先生的博客-CSDN博客_docker pm2 ENTRYPOINT 命令1 命令2 命令3 dockerfile中添加: RUN chmod -x setup.sh ENTRYPOINT [\\\"sh\\\", \\\"./setup.sh\\\"]

    2024年02月12日
    浏览(40)
  • SSH连接服务器后执行多条命令

    SSH连接服务器后执行多条命令 大家平时有没有遇到自己连接云服务器,ssh 连接上去之后,发现自己的一些小工具用不了 例如go build无法使用 ,由于我们安装配置golang 环境的时候,是在文件/etc/profile中写了配置,因此需要source 一下/etc/profile 那么是否可以在ssh 连接上服务器的

    2024年02月04日
    浏览(39)
  • DBeaver一次性执行mysql多条sql

    最新开始弃用Navicat,改用dbeaver,DBeaver需要Java语言支持,所以安装之前需要配置JDK环境; 再使用DBeaver执行多个SQL语句时(语句已使用;分隔)报错: 一、选中多条sql语句后,使用快捷键:alt+x 执行,即可; 二、在DBeaver的 连接设置中 驱动属性 中 allowMultiQueries 从 默认的fal

    2024年02月11日
    浏览(70)
  • 【shell】通过EOF实现一个链接执行多条sql

    在shell脚本中,通常将EOF与 结合使用,表示后续的输入作为子命令或子Shell的输入,直到再遇到EOF为止,再返回到主Shell。EOF( 即 end of file )只是一个分界符。 EOF一般会配合cat能够多行文本输出,本文最后实现通过EOF执行多条sql。     两个都是获取stdin,并在EOF处结束stdin,输

    2024年02月12日
    浏览(42)
  • DBeaver同时执行多条insert into报错处理

    之前使用的数据库连接软件Navicat的破解版,后来公司要求不可以使用破解版的Navicat,所以就换了DBeaver。 这是一个很不错的软件,免费,而且可以连接不同类型的数据库,MySQL、Oracle、hive、SQLserver等都可以使用,很方便也很良心,但是在使用的过程中发现了一个问题,DBeav

    2024年02月11日
    浏览(52)
  • neo4j中如何并列执行多条命令

    在Neo4j中,你可以使用 WITH 子句将多个Cypher命令串联起来并一起执行。 WITH 子句允许你在一个查询中执行多个操作,并将结果传递到下一个操作中。 下面是一个示例,演示了如何在Neo4j中并列执行多条命令: 在上面的示例中, WITH 子句将 1 传递到下一个操作中,并在下一个操

    2024年01月23日
    浏览(42)
  • mapper.xml中循环执行多条语句时报错,但是单独拿SQL到数据库却可以执行

    我是批量修改数据,用foreach标签包住update语句,报错信息如下: 最后解决,在数据源配置中添加参数:

    2024年02月12日
    浏览(40)
  • 实现以管理员权限打开window终端cmd,并在终端里执行多条指令的功能

    本文实现以管理员权限打开window终端cmd,并在终端里执行多条指令的功能。 以挂载vhd虚拟盘、卸载vhd虚拟盘为例。 一、挂载vhd虚拟盘 C#工程 vhdAttach, 生成vhdAttach.exe,vhdAttach.exe的功能为:启动windows终端cmd.exe,读取attach-vhd.txt中的内容,并在终端里执行attach-vhd.txt中的多条指令

    2024年02月10日
    浏览(54)
  • bat 获取手机SN & 处理adb cmd 返回结果-(For 中执行多条cmd 的用法)

    tips: ①对应的 Notepad++ 的快捷键为 Ctrl+k (单行、多行注释) Ctrl+q (区块注释)         参数作为输出参数时,注意:                 ★函数内不要使用SETLOCAL和ENDLOCAL                 ★此文件不要设置setlocal enabledelayedexpansion  执行结果: 执行结果:

    2024年02月15日
    浏览(41)
  • Dapper.Lite 使用教程

    以MySQL数据库为例 NuGet搜索Dapper.Lite并安装最新版本。 NuGet搜索MySqlConnector并安装最新版本。 也可以使用MySql.Data库,但MySqlConnector库性能更好。 README.md (gitee) wiki (gitee) README.md (github) wiki (github) Dapper.Lite 如有问题加QQ群:497956447。 https://gitee.com/s0611163/Dapper.Lite https://github.com/06

    2024年02月07日
    浏览(35)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包