Dapper Multiple Results à partir d'une seule requête

c# dapper sql-server

Question

Bonjour, j'essaie de me familiariser avec Dapper.

Ma situation est que je veux tirer deux valeurs d'une requête dans deux chaînes distinctes. Je ne suis pas sûr si je vais à ce sujet de la bonne manière, mais c'est ce que je fais:

string sql = @"Select type, name 
              FROM ZipData 
              WHERE Zip = @zip";

using (var multi = conn.QueryMultiple(sql, new { zip = zip }))
{
   string result = multi.Read<string>().SingleOrDefault();         
}

Et je reçois Impossible d'accéder à un objet disposé. Nom de l'objet: 'GridReader'. en essayant de lire la deuxième chaîne. La chose est qu'il obtient la première valeur correctement et a les deux champs dans le lecteur que j'essaye d'obtenir. Je suis sûr que je me trompe

Qu'est-ce que je fais mal ici? Ive googlé mais peut trouver un exemple spécifique.

Réponse acceptée

Vous utilisez mal QueryMultiple . Ce paramètre est défini pour les instructions SQL composées qui renvoient plusieurs jeux de résultats. Quelque chose comme:

SELECT Foo FROM MyTable;
SELECT Bar FROM MyOtherTable;

D'un autre côté, vous essayez d'obtenir deux colonnes différentes à partir d'un jeu de résultats unique . Vous devez donc utiliser la méthode de Query normale:

var result = conn.Query(sql, new { zip = zip }).Single();
var type = result.type;
var name = result.name;

Query renvoie un énumérable (car une requête peut généralement renvoyer plusieurs lignes). Il semble que vous ne vouliez qu'une ligne, cependant, nous .Single à la fin pour simplement obtenir cette ligne. De là, le type de retour est dynamic , vous pouvez donc simplement vous référer aux propriétés impliquées par les colonnes dans votre SELECT : type et name .




Sous licence: CC-BY-SA with attribution
Non affilié à Stack Overflow
Est-ce KB légal? Oui, apprenez pourquoi
Sous licence: CC-BY-SA with attribution
Non affilié à Stack Overflow
Est-ce KB légal? Oui, apprenez pourquoi