sql >> Database teknologi >  >> RDS >> Sqlserver

Dapper.NET og lagret proc med flere resultatsæt

QueryMultiple understøtter evnen til at håndtere flere resultatsæt. Den eneste designbegrænsning, vi tilføjede, var fuldstændig deaktivering af buffering for gitterlæseren. Dette betyder, at hele API'et streames .

I det enkleste tilfælde kan du bruge:

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

I det lidt mere sofistikerede tilfælde kan du lave skøre ting som dette:

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 skal tilføje denne ved hjælp af sætningen for at aktivere 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. CTE Recursion for at få træhierarki

  2. JDBC returnerer tomt resultatsæt

  3. Fejl i udviklingen på Heroku

  4. Sådan omdøbes et kolonnenavn i SQL?