我想从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()
只会删除非托管资源,因为我将数据放在我的列表中,我认为这是安全的。感谢。
答案 0 :(得分:2)
这样可以正常工作。
IDataRecord
个实例不受SqlDataReader.Dispose
的任何影响。它们包含自己的数据和模式信息的完整副本,与读者完全分开。