C#コードでdapperを使用して出力パラメータをストアドプロシージャに渡す 質問する

C#コードでdapperを使用して出力パラメータをストアドプロシージャに渡す 質問する

この形式のストアドプロシージャがあります

CREATE PROCEDURE SP_MYTESTpROC
    @VAR1 VARCHAR(10),
    @VAR2 VARCHAR(20),
    @BASEID INT ,
    @NEWID INT OUTPUT
As Begin
   INSERT INTO TABLE_NAME(username, firstname)
      select @VAR1, @VAR2 
      WHERE ID = @BASEID

   SET @NEWID = SCOPE_IDENTITY() AS INT
END

Dapper を使用して C# コードからこのストアド プロシージャを呼び出しています。質問は、Dapper を使用しているときに、出力パラメーターをストアド プロシージャに渡すにはどうすればよいかということです。

ベストアンサー1

ただ検索するだけテスト.csファイルにはこの例が見つかります

public void TestProcSupport()
{
    var p = new DynamicParameters();
    p.Add("a", 11);
    p.Add("b", dbType: DbType.Int32, direction: ParameterDirection.Output);
    p.Add("c", dbType: DbType.Int32, direction: ParameterDirection.ReturnValue);
    connection.Execute(@"create proc #TestProc 
                         @a int,
                         @b int output
                         as 
                         begin
                             set @b = 999
                             select 1111
                             return @a
                         end");
    connection.Query<int>("#TestProc", p, commandType: CommandType.StoredProcedure).First().IsEqualTo(1111);
    p.Get<int>("c").IsEqualTo(11);
    p.Get<int>("b").IsEqualTo(999);
}

つまり、C#コードは次のように書けると思います。

public void InsertData()
{
    var p = new DynamicParameters();
    p.Add("VAR1", "John");
    p.Add("VAR2", "McEnroe");
    p.Add("BASEID", 1);
    p.Add("NEWID", dbType: DbType.Int32, direction: ParameterDirection.Output);
    connection.Query<int>("SP_MYTESTpROC", p, commandType: CommandType.StoredProcedure);
    int newID =  p.Get<int>("NEWID");
}

補足ですが、ストアド プロシージャのプレフィックスとして SP を使用しないでください。これはシステム定義のプロシージャ用に予約されており、Microsoft が同じ名前を使用することにした場合、問題が発生する可能性があります。可能性は低いですが、これは悪い習慣であり、なぜリスクを冒すのでしょうか。

おすすめ記事