【C#/.NET】Dapper使用QueryMultipleAsync执行多条SQL
目录
背景
对于查询数据列表的功能,需要分页已经查询总数。这里涉及两句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);
}

这里是查询MYSQL,使用了sql_calc_found_rows在第一个查询分页数据的SQL中,第二条是SELECT FOUND_ROWS()来获取Limit之外的行数。
使用QueryMultipleAsync方法返回的是一个GridReader对象。这个对象提供了一些方法读取数据,比如
Read, ReadAsync |
返回可枚举的动态类型 |
Read<T>, ReadAsync<T> |
返回 T 参数指定类型的枚举 |
ReadFirst, ReadFirstAsync |
Returns the first row as a dynamic type |
ReadFirst<T>, ReadFirstAsync<T> |
将第一行作为动态类型返回 |
ReadFirstOrDefault, ReadFirstOrDefaultAsync |
返回第一行作为 T 类型参数指定类型的实例 |
ReadFirstOrDefault<T>, ReadFirstOrDefaultAsync<T> |
将第一行作为动态类型返回,如果未返回任何结果,则返回 null |
ReadSingle, ReadSingleAsync |
返回第一行作为 T 类型参数指定类型的实例,如果没有返回结果则返回 null |
ReadSingle<T>, ReadSingleAsync<T> |
在预期只返回一行时使用。 返回动态类型 |
ReadSingleOrDefault, ReadSingleOrDefaultAsync |
在预期返回零行或一行时使用。 返回动态类型或 null |
示例中使用ReadAsync读取数据,ReadSingleAsync读取count然后返回元组
var list = await multi.ReadAsync<Log>();
var total = await multi.ReadSingleAsync<int>();
return (list, total);

总结
通过使用Dapper的QueryMultipleAsync一次性查询多个结果,减少了与数据库服务器的请求次数。减少了代码量。
【C#/.NET】Dapper使用QueryMultipleAsync执行多条SQL的更多相关文章
- C#实现执行多条SQl语句,实现数据库事务
C#实现执行多条SQl语句,实现数据库事务 在数据库中使用事务的好处,相信大家都有听过银行存款的交易作为事务的一个例子.事务处理可以确保除非事务性单元内的所有操作都成功完成,否则不会永久更新面向数据的 ...
- c#中执行多条sql语句【ORA-00911: 无效字符】
问题描述: 在plsql里执行多条sql语句的时候,使用“,”(逗号)分隔,测试可以执行多条,而在C#执行多条sql语句的时候[ORA-00911: 无效字符]. 有时我们需要一次性执行多条sql语句 ...
- Spring 中jdbcTemplate 实现执行多条sql语句
说一下Spring框架中使用jdbcTemplate实现多条sql语句的执行: 很多情况下我们需要处理一件事情的时候需要对多个表执行多个sql语句,比如淘宝下单时,我们确认付款时要对自己银行账户的表里 ...
- MyBatis一次执行多条SQL语句
MyBatis一次执行多条SQL语句 有个常见的场景:删除用户的时候需要先删除用户的外键关联数据,否则会触发规则报错. 解决办法不外乎有三个:1.多条sql分批执行:2.存储过程或函数调用:3.sql ...
- java执行多条SQL语句
一次执行多条SQL的技术要点如下: DatabaseMetaData接口是描述有关数据库的整体综合信息,由于DatabaseMetaData是接口,所以没有构造方法,故不能使用new来创建Databa ...
- 执行多条SQL语句,实现数据库事务(不可传入Sql参数)
执行多条SQL语句,实现数据库事务(不可传入Sql参数) http://blog.csdn.net/hanxuemin12345/article/details/9980371
- 如何在Oracle中一次执行多条sql语句 (.net C#)
关键是不能换行,要加上begin ...sql... end; 每个SQL用:隔开,end后面必须加: 以下是拷贝于:http://www.cnblogs.com/teamleader/arc ...
- jmert jdbc request支持执行多条sql语句并设置jdbc字符集
1.jdbc request支持执行多条sql语句 在JDBC Connection Configuration中的sql连接字串中添加如下内容 allowMultiQueries=true 如下图: ...
- (学)如何在Oracle中一次执行多条sql语句
队长同学原来的地址:https://www.cnblogs.com/teamleader/archive/2007/05/31/765943.html队长同学原来的描述: 有时我们需要一次性执行多条s ...
- mysql -- 一次执行多条sql语句
最近要做一个软件升级,其中涉及到数据库表字段的变动(新增或删除或修改),所有的关于数据库的变动的sql语句都是存放在Sqlupdate.sql文件中,每次升级的时候都需要执行一次Sqlupdate.s ...
随机推荐
- 【Avalonia】【跨平台】关于控件阴影简单用法
背景 当我们在用Avalonia开发项目时,我们可能会对控件添加一些阴影效果,改善用户体验,我们开发WPF的人知道,WPF会给我提供Effect这么一个属性,这是方便我们进行阴影以及特效使用,但是Av ...
- python进程之进程池、线程池与异步回调机制
进程线程不可以无限制的创建,因为有硬件的限制.为了避免资源被程序消耗过度,可以使用进程池或线程池的技术. 池 降低程序的执行效率,但是保证了计算机硬件的安全 进程池 提前创建好固定数量 ...
- abc294G
Upd G 看上好模板的样子, 果然是个模板题 好题 , 首先考虑这张图的 \(Euler \ Tour\), 简单点说, 就是dfs一遍, 把每个点入栈出栈顺序存起来, 举个例子· 2 1 2 2 ...
- java.lang.OutOfMemoryError- unable to create new native thread 问题排查
问题描述 最近连续两天大约凌晨3点,线上服务开始异常,出现OOM报错.且服务所在的物理机只能ping通,但是无法登录.报错信息如下: ERROR 04-12 03:01:43,930 [Default ...
- Java工作环境的配置与Eclipse的安装
如果您觉得这篇文章有用,请点个赞呀! Eclipse是一个开放源代码的.基于Java的可扩展开发平台.就其本身而言,它只是一个框架和一组服务,用于通过插件组件构建开发环境.Eclipse 附带了一个标 ...
- 33-module
const { resolve } = require('path') const HtmlWebpackPlugin = require('html-webpack-plugin') module. ...
- 使用Jmeter测试MQTT
使用Jmeter测试MQTT 准备工作 JMeter本身没有MQTT的压力测试功能需要下载插件进行压力测试下载地址将下载好的mqtt-xmeter-2.0.2-jar-with-dependencie ...
- .Net8的快速JIT,分层编译,R2R的设置
前言 本篇通过一些简单的JIT设置,比如快速JIT,适用于循环的快速 JIT,分层编译,R2R等核心内容设置,快速进入.Net8核心区域. 概括 1.快速JIT 什么是快速JIT,顾名思义,被Rosy ...
- I2C总线 | I2C总线介绍
I2C总线 | I2C总线介绍 目录 I2C总线 | I2C总线介绍 I2C总线介绍 I2C有如下特点: I2C总线术语 I2C总线位传输 IIC总线数据传输 1.字节格式 2.应答响应 IIC总线寻 ...
- 2023-03-18:给定一个长度n的数组,每次可以选择一个数x, 让这个数组中所有的x都变成x+1,问你最少的操作次数, 使得这个数组变成一个非降数组。 n <= 3 * 10^5, 0 <= 数值
2023-03-18:给定一个长度n的数组,每次可以选择一个数x, 让这个数组中所有的x都变成x+1,问你最少的操作次数, 使得这个数组变成一个非降数组. n <= 3 * 10^5, 0 &l ...