处置后使用SqlDataReader记录

时间:2014-09-30 20:06:04

标签: c# linq dispose sqldatareader

我想从System.Data.IDataRecord检索所有SqlDataReader。使用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()只会删除非托管资源,因为我将数据放在我的列表中,我认为这是安全的。感谢。

1 个答案:

答案 0 :(得分:2)

这样可以正常工作。

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