sql >> Databasteknik >  >> RDS >> Sqlserver

Dapper.NET och lagrad proc med flera resultatuppsättningar

QueryMultiple stöder förmågan att hantera flera resultatuppsättningar. Den enda designbegränsningen vi lade till var att helt inaktivera buffring för rutläsaren. Det betyder att hela API:et strömmar .

I det enklaste fallet kan du använda:

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

I det lite mer sofistikerade fallet kan du göra galna saker som detta:

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);

Du måste lägga till detta med hjälp av uttalandet för att aktivera QueryMultiple .

using Dapper; /* to add extended method QueryMultiple public static GridReader QueryMultiple(this IDbConnection cnn, string sql, object param = null, IDbTransaction transaction = null, int? commandTimeout = null, CommandType? commandType = null); */


  1. Skala PostgreSQL för stora mängder data

  2. SQL INTERSECT

  3. Hur man skapar en blogg i PHP och MySQL databas - Admin Posts

  4. Hur får man Insert id i MSSQL i PHP?