Eug*_*sev 10 .net c# database-connection
编写这样的辅助方法是否安全?它会不会关闭连接?我想知道如果一切顺利,它会,但是即使它抛出,ExecuteReader也会关闭连接吗?
public static IEnumerable<DbDataRecord> ExecuteSelect(string commandText, DbConnection conn)
{
using (DbCommand cmd = conn.CreateCommand())
{
cmd.CommandText = commandText;
conn.Open();
using (DbDataReader reader = cmd.ExecuteReader(CommandBehavior.CloseConnection))
{
foreach (DbDataRecord record in reader) { yield return record; }
}
}
}
Run Code Online (Sandbox Code Playgroud)
是的,即使它抛出异常也会关闭连接.如果您未指定CommandBehavior.CloseConnection并关闭连接,则您的调用代码无法访问阅读器的内容.
也来自MSDN:
执行该命令时,关闭关联的DataReader对象时将关闭关联的Connection对象.
完成后,应确保阅读器已关闭.关于所有这一切的好处是你已经将它包装在一个using语句中并且try/catch/finally在这种情况下你不使用读取器将被关闭然后将关闭数据库连接.
| 归档时间: |
|
| 查看次数: |
9606 次 |
| 最近记录: |