Dapper 无法将类型 'Dapper.WrappedReader' 的 object 转换为类型 'System.Data.SqlClient.SqlDataReader'
Dapper Unable to cast object of type 'Dapper.WrappedReader' to type 'System.Data.SqlClient.SqlDataReader'
尝试使用 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
WrappedDataReader
和 IWrappedReader
都定义了一个 Reader
属性,这将使您能够获得底层的 SqlDataReader
。因此尝试将您的代码更改为:
(SqlDataReader)((IWrappedDataReader)con.ExecuteReader(query)).Reader { ... }
或:
(SqlDataReader)((WrappedDataReader)con.ExecuteReader(query)).Reader { ... }
话虽这么说,您可能希望为您的 using
子句实际使用原始(包装)reader——这样它就有机会对 .Dispose()
做出反应.如果这样做,您可以在 using
子句的正文中获取 sql reader 并从那时起使用它。
尝试使用 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
WrappedDataReader
和 IWrappedReader
都定义了一个 Reader
属性,这将使您能够获得底层的 SqlDataReader
。因此尝试将您的代码更改为:
(SqlDataReader)((IWrappedDataReader)con.ExecuteReader(query)).Reader { ... }
或:
(SqlDataReader)((WrappedDataReader)con.ExecuteReader(query)).Reader { ... }
话虽这么说,您可能希望为您的 using
子句实际使用原始(包装)reader——这样它就有机会对 .Dispose()
做出反应.如果这样做,您可以在 using
子句的正文中获取 sql reader 并从那时起使用它。