c# - 处理后SqlDataReader记录的使用

标签 c# linq dispose sqldatareader

我想从 SqlDataReader 中检索所有 System.Data.IDataRecord。使用 LINQ,这很简单,但我希望能够处理所有 SQL 对象并保持数据完好无损。以下是我所拥有的:

private static List<System.Data.IDataRecord> getRecords()
{
    List<System.Data.IDataRecord> records;
    //Make a SqlConnection and SqlCommand.
    using (SqlDataReader reader = command.ExecuteReader())
    {
        records = reader.Cast<System.Data.IDataRecord>().ToList();
    }
    //Dispose of SqlCommand and SqlConnection.
    return records;
}

但这是我的问题:当 getRecords() 完成时,我有我的数据,并且我已要求释放所有 SQL 对象。但是我是否以某种方式卡在数据上会阻止适当的资源处理?或者一旦垃圾收集器开始工作,我的数据最终会变得无效吗?我认为答案是否定的,但我正试图找到确定的东西。我相信 Dispose() 只会删除非托管资源,并且由于我将数据放在列表中,所以我认为它是安全的。谢谢。

最佳答案

这会很好用。

IDataRecord 实例不受 SqlDataReader.Dispose 的任何影响。它们包含自己的数据和模式信息的完整副本,完全独立于读者。

关于c# - 处理后SqlDataReader记录的使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26129155/

相关文章:

c# - 使用 dispose/finalize 模式释放 socket/event/ummaged 代码的正确技术

c# - 如何处理声明为列表的属性?

c# - 正则表达式解析有限的 SQL Where 子句

c# - ??运算符未触发 DataTable DataRow 中的 System.DBNull 类型

java - 为什么 SWT CTabItem 不递归地处理子部件?

c# - 使用Datarow读取LINQ查询的结果

c# - 使用 ObservableCollection 进行 LINQ

c# - 鼠标悬停时更改按钮颜色

c# - 通用属性的序列化

c# - Redis Lua 脚本返回表并解析对象