在下面的示例中,如果异常在using语句中,当抛出异常时,连接是否将关闭并释放?

using (var conn = new SqlConnection("..."))
{
    conn.Open();
    // stuff happens here and exception is thrown...
}

我知道下面的代码将确保它能做到,但我很好奇使用语句是如何做到的.

var conn;
try
{
    conn = new SqlConnection("...");
    conn.Open();
    // stuff happens here and exception is thrown...
}
// catch it or let it bubble up
finally
{
    conn.Dispose();
}

相关的:

What is the proper way to ensure a SQL connection is closed when an exception is thrown?

推荐答案

是的,using将代码包装在try/finally块中,如果finally部分存在,它将调用Dispose().然而,它不会直接调用Close(),因为它只判断正在实现的IDisposable接口,因此判断Dispose()方法.

另见:

Asp.net相关问答推荐

如何在 asp.net 服务器中使用字体

无法翻译 LINQ

log4net 记录所有未处理的应用程序错误

在 ASP.Net 中使用 Page_Load 和 Page_PreRender

IE10 SCRIPT5009:__doPostBack未定义

带有 Web 套接字的 SignalR

如何使用 javascript 获取 MVC 应用程序的基本 URL

System.Web.Helpers.Crypto - 盐在哪里?

加载特定 UpdatePanel 后如何调用客户端 javascript 函数

RestSharp 不反序列化 JSON 对象列表,始终为 Null

MvcBuildViews true 与 ASP.NET MVC 2 中的实体框架

stream.CopyTo - 文件为空.网

如何使用 ASP.Net MVC 路由来路由图像?

Asp.net 中的下拉列表验证使用必填字段验证器

存在 ios 7 虚拟键盘时,div 元素不会停留在底部

解析器错误:无法创建类型

如何在我自己的方法中模仿 string.Format()?

.NET 4.0 中的自定义 MembershipProvider

MVC3 值 Ajax 文件上传

如何使用 ConfigurationManager.AppSettings