下面是一個示例代碼,而周圍的Googling檢索使用,我在幾個地方發現yield關鍵字數據庫中的數據:使用yield來遍歷datareader可能不會關閉連接?
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將清理最後,但如果不是連接而是更重要的資源呢?