c# - 铸造和处置 - 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,另一个执行强制转换以确保正确清理所有内容。
解决方案
投射不会创建新对象。
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
推荐阅读
- c++ - 从用户获取输入并将其插入单链表时,我们如何简化和排序多项式
- charts - 仅将数据标签添加到折线图上的最后一个点
- arrays - $in 查询数组字段 Mongo db
- python - 时间序列的一维 CNN 问题
- javascript - Vuejs如何触发外部脚本事件
- vue.js - 如何在 nuxtJs 配置文件的 head 标签中添加包含函数的脚本?
- r - 如何使用 R 4.1 中的 Octave?
- reactjs - 设置 react formik 验证后没有错误消息
- npm - M1 Big Sur 的 npm install 出现急剧返回错误
- teradata - 在 Teradata SQL 中选择给定系列中的 ID