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.
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
.