c# - Dapper 无法将类型为 'Dapper.WrappedReader' 的对象转换为类型 'System.Data.SqlClient.SqlDataReader'

标签 c# dapper

尝试使用 dapper 获取 SqlDataReader 但在标题上出现错误。 下面是代码:

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

最佳答案

尽你所能 see from the source code , WrappedReader 是:

#if DNXCORE50
    internal class WrappedReader : WrappedDataReader

Or :

#else
    internal class WrappedReader : IDataReader, IWrappedDataReader

WrappedDataReaderIWrappedReader 都定义了一个 Reader 属性,它允许您获取底层的 SqlDataReader。因此,尝试将您的代码更改为:

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

或者:

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

话虽如此,您可能希望为您的 using 子句实际使用原始(包装的)阅读器——这样它将有机会对 .Dispose()。如果这样做,您可以在 using 子句的主体中获取 sql 阅读器,并从那时起使用它。

关于c# - Dapper 无法将类型为 'Dapper.WrappedReader' 的对象转换为类型 'System.Data.SqlClient.SqlDataReader',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31142700/

相关文章:

dapper - 使用 Dapper.Contrib 和 InsertAsync 编写通用 InsertData 方法

c# - 使用 Entity Framework 加载具有大字符串属性的实体时性能不佳

c# - 当属性第二次设置为相同值时,INotifyPropertyChanged 不起作用

c# - 在 C# 中使用 HTTP API 的 Branch.io 链接

c# - 无法加载文件或程序集 crdb_adoplus.dll

c# - 有没有办法使用 Dapper 将每一行检索为 IDictionary<string, string> ?

c# - 通过发送信号向下滚动网络浏览器

foreign-keys - dapper 在 classmapper 中一对一映射

c# - 如何使用 Dapper 从 oracle 读取时间偏移量

c# - SQLite 作为 SQL Server 的内存数据库