首页 / .NET / 正文

[Dapper].NET/C#中使用Dapper时如何获取存储过程返回的多个结果集?

6913 发布于: 2018-01-20 读完约需6分钟

[Dapper].NET/C#中使用Dapper时如何获取存储过程返回的多个结果集?

问题描述

Dapper中是否有方法获取从存储过程中返回的多个结果集,如果有,应该使用Dapper的哪个或者哪些方法来实现呢?

方案一

Dapper 中,可以使用 QueryMultiple 方法来处理多结果集的查询操作,简单的使用案例如下:

var grid = connection.QueryMultiple("select 1 select 2");
grid.Read<int>().First().IsEqualTo(1);
grid.Read<int>().First().IsEqualTo(2);

复杂的 Dapper 使用案例如下:

var p = new DynamicParameters();
p.Add("a", 11);
p.Add("r", dbType: DbType.Int32, direction: ParameterDirection.ReturnValue);

connection.Execute(@"create proc #spEcho
@a int
as 
begin

select @a Id, 'ping' Name, 1 Id, 'pong1' Name
select @a Id, 'ping' Name, 2 Id, 'pong2' Name
return @a
end");

var grid = connection.QueryMultiple("#spEcho", p, 
                                     commandType: CommandType.StoredProcedure);

var result1 = grid.Read<dynamic, dynamic, Tuple<dynamic, dynamic>>(
                  (a, b) => Tuple.Create((object)a, (object)b)).ToList();
var result2 = grid.Read<dynamic, dynamic, Tuple<dynamic, dynamic>>(
                  (a, b) => Tuple.Create((object)a, (object)b)).ToList();

((int)(result1[0].Item1.Id)).IsEqualTo(11);
((int)(result1[0].Item2.Id)).IsEqualTo(1);

((int)(result2[0].Item1.Id)).IsEqualTo(11);
((int)(result2[0].Item2.Id)).IsEqualTo(2);

p.Get<int>("r").IsEqualTo(11);

方案二

使用 Multiple 结果集:

var reader = conn.QueryMultiple("ProductSearch", param: new { CategoryID = 1, SubCategoryID = "", PageNumber = 1 }, commandType: CommandType.StoredProcedure);
var CategoryOneList = reader.Read<CategoryOne>().ToList();
var CategoryTwoList = reader.Read<CategoryTwo>().ToList();

存储过程示例如:

CREATE PROCEDURE [dbo].[ProductSearch]
    @CategoryID as varchar(20),
    @SubCategoryID as varchar(20),
    @PageNumber as varchar(20)
AS
BEGIN
    SELECT * FROM ProductTbl
    SELECT * FROM ProductTbl
END

版权声明:本作品系原创,版权归码友网所有,如未经许可,禁止任何形式转载,违者必究。

上一篇: [ASP.NET Core]ASP.NET Core中如何安装配置并使用Automapper实体映射工具?

下一篇: [Dapper].NET/C#中使用Dapper如何处理多层级实体映射的问题?

本文永久链接码友网 » [Dapper].NET/C#中使用Dapper时如何获取存储过程返回的多个结果集?

分享扩散:

发表评论

登录用户才能发表评论, 请 登 录 或者 注册