Dapper.Netのストアドプロシージャからフラットレコードセットを戻す方法

dapper sql-server-2005 stored-procedures

質問

私はSQL Server 2005上で実行されているプロジェクトを持っています。私は、いくつかの入力パラメータを受け入れ、2つの出力パラメータを持ち、selectステートメントから結果セットを返しますストアドプロシージャを持っています。

データは主キーを持たない単純なdtoクラス 'Foo'だけオブジェクトとして返されることを意図していません。

私は以下のコードでDapper.Netを使用しようとしましたが、例外エラーが返される限り

マルチマッピングAPIを使用する場合は、Id以外のキーがある場合は必ずsplitOnパラメータを設定してください

コード:

var p = new DynamicParameters();
p.Add("@Code", code);
p.Add("@MessageControlId", getMessageControlId);
p.Add("@SuccessCode", dbType: DbType.Int32, direction: ParameterDirection.Output);
p.Add("@ErrorDescription", dbType: DbType.String, direction: ParameterDirection.Output, size: 255);

var result = this.db.Query(sql: "up_MessageProcessed_get", param: p, commandType: CommandType.StoredProcedure);

Dapper.Netでこれを行うことができますか?シンプルな結果セットを得るために別のものを呼び出すべきですか?

要求に応じて、ここにはプロシージャのシェルがあり、戻り値を設定し、結果セットを1つ返します。

CREATE PROCEDURE [dbo].[up_MessageProcessed_get]
@Code varchar(10),
@MessageControlID varchar(22),
@SuccessCode int OUTPUT,
@ErrorDescription varchar(255) OUTPUT
AS

BEGIN

Select 2 as MessageProcessID, 38349348 as StartNum, 3874900 as EndNum, GETDATE() as StartDate, GETDATE() as EndDate
SET @SuccessCode = 0
SET @ErrorDescription = 'Completed successfully'
END

受け入れられた回答

これは、 "より多くのコンテキストが必要"なので、 "答え"ではありませんが、コードを投稿するとうまくいきます(下記)。ここでの問題は、ストアドプロシージャ内の何かに固有のものであると思われます。

public void TestIssue17648290()
{
    var p = new DynamicParameters();
    int code = 1, getMessageControlId = 2;
    p.Add("@Code", code);
    p.Add("@MessageControlId", getMessageControlId);
    p.Add("@SuccessCode", dbType: DbType.Int32, direction: ParameterDirection.Output);
    p.Add("@ErrorDescription", dbType: DbType.String, direction: ParameterDirection.Output, size: 255);
    connection.Execute(@"CREATE PROCEDURE #up_MessageProcessed_get
@Code varchar(10),
@MessageControlID varchar(22),
@SuccessCode int OUTPUT,
@ErrorDescription varchar(255) OUTPUT
AS

BEGIN

Select 2 as MessageProcessID, 38349348 as StartNum, 3874900 as EndNum, GETDATE() as StartDate, GETDATE() as EndDate
SET @SuccessCode = 0
SET @ErrorDescription = 'Completed successfully'
END");
    var result = connection.Query(sql: "#up_MessageProcessed_get", param: p, commandType: CommandType.StoredProcedure);
    var row = result.Single();
    ((int)row.MessageProcessID).IsEqualTo(2);
    ((int)row.StartNum).IsEqualTo(38349348);
    ((int)row.EndNum).IsEqualTo(3874900);
    DateTime startDate = row.StartDate, endDate = row.EndDate;
    p.Get<int>("SuccessCode").IsEqualTo(0);
    p.Get<string>("ErrorDescription").IsEqualTo("Completed successfully");
}

出力する:

Running TestIssue17648290 - OK!

(つまり:それはうまく動作します)



ライセンスを受けた: CC-BY-SA with attribution
所属していない Stack Overflow
このKBは合法ですか? はい、理由を学ぶ
ライセンスを受けた: CC-BY-SA with attribution
所属していない Stack Overflow
このKBは合法ですか? はい、理由を学ぶ