出力パラメータはmulti.Readで常にnullです。

c# dapper

質問

私たちはDapper.Netを広範囲に使用しており、とても満足しています。ただし、 multi.Readを使用してストアドプロシージャから出力パラメータを取得しようとすると、問題が発生しています。

var p = new DynamicParameters(); 
p.Add("@id", id); 
p.Add("TotalRows", dbType: DbType.Int32, direction: ParameterDirection.Output); 

using (var multi = cnn.QueryMultiple(string.Format("dbo.[{0}]", spName), p,
    commandType: CommandType.StoredProcedure))
{  
    int TotalRows = p.Get<int>("@TotalRows"); //This is always null

    var results = multi.Read<New_Supplier>().ToList<IDBSupplier>();
    var areas = multi.Read<node>().ToList<IDBNode>();
    var categories = multi.Read<node>().ToList<IDBNode>();
    int TotalRows = multi.Read<int>().FirstOrDefault(); // This works

}

ただし、 connection.Query構文を使用して単一の結果セットを取得すると、出力パラメータが設定されます。

var result = cnn.Query<New_Supplier>(string.Format("spname"), p,
    commandType: CommandType.StoredProcedure).ToList<New_Supplier>();
int TotalRows = p.Get<int>("@TotalRows");

エラーは、Dapper DynamicParametersの出力パラメータのAttachedParamのsqlValueが常にnullであることです。

この問題を回避するために、出力パラメータの値をストアド・プロシージャの結果セットに追加し、それをそのように読んでいます。

パラメータが常にnullの場合

受け入れられた回答

TDSストリームでは、 OUTパラメータは最後にあります。 Query<T>例では、TDSストリーム消費しています

var result = cnn.Query<New_Supplier>(string.Format("spname"), p,
    commandType: CommandType.StoredProcedure).ToList<New_Supplier>();
int TotalRows = p.Get<int>("@TotalRows");

ストリームを消費したため、新しいパラメータ値に達しました。利用可能な値を持つ必要があります。 QueryMultiple例では、TDSストリームの最後に達していませんp.Get移動してみてください:

var p = new DynamicParameters(); 
p.Add("@id", id); 
p.Add("TotalRows", dbType: DbType.Int32, direction: ParameterDirection.Output); 

using (var multi = cnn.QueryMultiple(string.Format("dbo.[{0}]", spName), p,
    commandType: CommandType.StoredProcedure))
{      
    var results = multi.Read<New_Supplier>().ToList<IDBSupplier>();
    var areas = multi.Read<node>().ToList<IDBNode>();
    var categories = multi.Read<node>().ToList<IDBNode>();
}
int TotalRows = p.Get<int>("@TotalRows");

それでも問題が解決しない場合は、教えてください; p



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