首页 > 解决方案 > 铸造和处置 - IDataReader

问题描述

假设我创建了一个数据阅读器。

我的数据库类中有一个方法 - 以这种方式创建它:

db.ExecuteReaderIDb(sSQL)

我可以立即将其分配给 using 语句,它会在最后被处理掉,但我想使用 HasRows 属性,这意味着我想强制转换为 System.Data.Common.DbDataReader。

我的问题涉及对 System.Data.Common.DbDataReader 执行立即转换。

在这种情况下,如果我在 using 语句中进行转换,有几个问题: 1. 它是否创建了 2 个对象?2. 如果适用,如果我调用 Dispose of what I cast to,这两个对象都会被处理掉吗?

否则,我是否需要 2 个 using 语句,一个返回 IDataReader,另一个执行强制转换以确保正确清理所有内容。

标签: c#vb.netidisposable

解决方案


投射不会创建新对象。

Using reader = db.ExecuteReaderIDb(sSQL)
  Dim someOtherReader = CType(reader, System.Data.Common.DbDataReader)

  ' someOtherReader and reader point to the same object
  ' disposing reader will also dispose someOtherReader
End Using

你总是可以在 using

Using reader = CType(db.ExecuteReaderIDb(sSQL), System.Data.Common.DbDataReader)
    ...
End Using

推荐阅读