Dapper Impossibile eseguire il cast dell'oggetto di tipo 'Dapper.WrappedReader' per digitare 'System.Data.SqlClient.SqlDataReader'

c# dapper

Domanda

Cercando di ottenere SqlDataReader usando dapper ma ottenendo l'errore sul titolo. Di seguito è riportato il codice:

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

Risposta accettata

Come puoi vedere dal codice sorgente , WrappedReader è:

#if DNXCORE50
    internal class WrappedReader : WrappedDataReader

Oppure :

#else
    internal class WrappedReader : IDataReader, IWrappedDataReader

Sia WrappedDataReader che IWrappedReader definiscono una proprietà Reader che ti consentirà di ottenere il SqlDataReader sottostante. Quindi prova a cambiare il tuo codice in:

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

O:

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

Detto questo, potresti voler usare effettivamente il lettore originale (avvolto) per la tua clausola di using - in questo modo avrà l'opportunità di reagire a .Dispose() . Se lo fai in questo modo, puoi ottenere il lettore sql nel corpo della tua clausola using e usarlo da quel momento in poi.



Autorizzato sotto: CC-BY-SA with attribution
Non affiliato con Stack Overflow
Autorizzato sotto: CC-BY-SA with attribution
Non affiliato con Stack Overflow