【发布时间】:2010-09-08 00:46:05
【问题描述】:
这是一个示例代码,它使用我在谷歌搜索时在几个地方找到的 yield 关键字从数据库中检索数据:
public IEnumerable<object> ExecuteSelect(string commandText)
{
using (IDbConnection connection = CreateConnection())
{
using (IDbCommand cmd = CreateCommand(commandText, connection))
{
connection.Open();
using (IDbDataReader reader = cmd.ExecuteReader())
{
while(reader.Read())
{
yield return reader["SomeField"];
}
}
connection.Close();
}
}
}
我认为在这个示例代码中,如果我们不遍历整个数据读取器,连接就不会关闭,这是否正确?
这是一个不会关闭连接的示例,如果我理解正确的话..
foreach(object obj in ExecuteSelect(commandText))
{
break;
}
对于可能不是灾难性的数据库连接,我想 GC 最终会清理它,但如果它不是连接而是更关键的资源怎么办?
【问题讨论】: