Avec dapper, je peux effectuer une exécution par lots pour les procédures stockées, à l'instar de:
connection.Execute(@"
exec sp1 @i = @one, @y = @two
exec sp2 @i = @three",
new { one = 1, two = 2, three = 3 });
Cependant, le seul moyen de récupérer les données que j'ai vues jusqu'à présent est d'utiliser
results.Read<Type>()
Que se passe-t-il si les résultats ne correspondent pas à un objet? Par exemple, j'écris du code "générique" pour exécuter tout SP avec des paramètres d'entrée / sortie variables et des ensembles de résultats.
Merci
Quelle API voulez-vous? Si vous pouvez traiter les grilles séparément: faites cela:
using(var multi = connection.QueryMultiple(...))
{
while(!multi.IsConsumed) {
// ...
}
}
où ...
a accès à:
Read()
pour dynamic
lignes dynamic
- notant que chaque ligne implémente également IDictionary<string,object>
Read<T>
() pour les lignes typées via des génériques Read(Type)
pour les lignes typées sans génériques Read<DapperRow
> () (en fait, ceci est juste le T
que Read<T>()
utilise pour implémenter Read()
, mais peut-être plus pratique), ce qui offre un accès légèrement supérieur aux métadonnées Si vous voulez déposer sur un IDataReader
brut, faites ceci:
using(var reader = connection.ExecuteReader(...)) {
// whatever you want
}
En ce qui concerne les paramètres: la classe DynamicParameters
fournit un accès beaucoup plus riche au contrôle des paramètres, y compris la direction des paramètres, etc.