Dapper Impossible de convertir l'objet de type 'Dapper.WrappedReader' pour taper 'System.Data.SqlClient.SqlDataReader'

c# dapper

Question

Essayer d'obtenir SqlDataReader utilisant dapper mais en obtenant l'erreur sur le titre. Voici le code:

using (var reader = (SqlDataReader)con.ExecuteReader(query))
                    {
                        while (reader.Read())
                        {
                            //do stuff here with reader
                        } 
                    }

Réponse acceptée

Comme vous pouvez le voir sur le code source , WrappedReader est soit:

#if DNXCORE50
    internal class WrappedReader : WrappedDataReader

Ou :

#else
    internal class WrappedReader : IDataReader, IWrappedDataReader

WrappedDataReader et IWrappedReader définissent tous deux une propriété Reader qui vous permettra d'obtenir le SqlDataReader sous-jacent. Essayez donc de changer votre code pour:

(SqlDataReader)((IWrappedDataReader)con.ExecuteReader(query)).Reader { ... }

Ou:

(SqlDataReader)((WrappedDataReader)con.ExecuteReader(query)).Reader { ... }

Cela étant dit, vous voudrez peut-être utiliser le lecteur d'origine (enveloppé) pour votre clause using - de cette façon, il aura l'occasion de réagir à .Dispose() . Si vous le faites de cette façon, vous pouvez obtenir le lecteur sql dans le corps de votre clause using et l'utiliser dès lors.



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