【发布时间】:2014-09-14 11:52:20
【问题描述】:
我正在从数据库中读取数据(sqlite、Visual Studio 2008、.net 3.5)
我有一个场景,数据读取器在依赖于数据库的层中创建,然后返回到与数据库无关的层。
internal static SQLiteDataReader GetReader( SQLiteCommand command)
{
SQLiteDataReader reader = command.ExecuteReader();
command.Dispose(); // Dispose comamnd here? Or is it Ok, not to dispose
// command?
return reader;
}
或者我是否必须以某种方式将命令返回给程序,这会消耗阅读器并将其处理在那里。还是可以不dispose命令?
添加说明
问题是,是否可以在创建阅读器之后但在从阅读器读取数据之前处理命令。或者如果让垃圾收集器处理命令是非常有害的,而不是在代码中调用 dispose?我还添加了我的建议,在哪里关闭命令。
我尝试再次改写问题,或提供额外的解释: 如代码sn-p所示,该命令在阅读器被迭代和关闭之前被处理。这将是一个很好的解决方案,因为在迭代阅读器的代码中,无法访问该命令。在创建阅读器之后,阅读器是否仍然需要该命令,或者我可以在创建 rader 后立即处理它。
【问题讨论】:
-
在没有创建它的代码中处理一个对象几乎总是错误的,它会导致太多的事故。这需要在调用此方法的任何代码中完成。一个简单的 using 语句很有可能完成工作。