Dapper.Netを広く使用しており、非常に満足しています。 multi.Readに使用してストアドプロシージャから出力パラメータを取得しようとしたときにしかし、我々はこの問題に遭遇しています出力パラメータは常にmulti.Readでnullです。
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ですか?
おかげでマルク、それが動作します。私は*単純なものでなければならないことを知っていましたが、ちょうどそれを見ることができませんでした.... – Simon
@Simonこれはおそらく明らかですが、追加するだけでADO.NETを直接使用する場合と全く同じ動作になります。 –