Używamy intensywnie Dapper.Net i jesteśmy z niego bardzo zadowoleni. Jednak mamy natknąć się problem, gdy próbuje odzyskać parametrów wyjściowych z procedury przechowywane przy użyciu multi.Read:Parametr wyjściowy zawsze ma wartość zerową z 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
}
Jednakże, jeśli używamy składni connection.Query aby uzyskać pojedynczy Resultset parametr wyjściowy jest wypełniana:
var result = cnn.Query<New_Supplier>(string.Format("spname"), p,
commandType: CommandType.StoredProcedure).ToList<New_Supplier>();
int TotalRows = p.Get<int>("@TotalRows");
błąd jest to, że sqlValue z AttachedParam od parametru wyjściowego w Wytworny DynamicParameters zawsze ma wartość null.
Aby obejść ten problem, dodaliśmy wartość parametru wyjściowego do zestawów wyników procedury przechowywanej i odczytujemy ją w ten sposób.
Dlaczego parametr jest zawsze pusty?
Dzięki Marc, to działa. Ja * wiedziałem * musiało to być coś prostego, ale po prostu nie mogłem tego zobaczyć ... – Simon
@Simon to chyba teraz oczywiste, ale żeby dodać: otrzymujesz dokładnie to samo zachowanie, gdy używasz bezpośrednio ADO.NET. –