sql >> データベース >  >> RDS >> Sqlserver

Dapper.NETおよび複数の結果セットを持つストアドプロシージャ

    QueryMultiple 複数の結果セットを処理する機能をサポートします。追加した唯一の設計上の制限は、グリッドリーダーのバッファリングを完全に無効にすることでした。これは、API全体がストリーミングであることを意味します 。

    最も単純なケースでは、次を使用できます:

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

    もう少し洗練されたケースでは、次のようなクレイジーなことを行うことができます:

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

    QueryMultipleを有効にするには、このusingステートメントを追加する必要があります。

    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. SQLServer2019の新機能

    2. mysqliがコマンドの同期外れエラーを出すのはなぜですか?

    3. オリンピック、UEFAユーロ2016サッカーの試合、データベースの共通点は何ですか?

    4. インデックスチューニングへのアプローチ–パート2