铸造和处置 - IDataReader

Casting and Disposing - IDataReader

假设我创建了一个数据reader。

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

db.ExecuteReaderIDb(sSQL)

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

我的问题是立即转换为 System.Data.Common.DbDataReader。

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

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

转换不会创建新对象。

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