铸造和处置 - 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
假设我创建了一个数据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