给定这段代码:
using (var conn = new SqlConnection("..."))
{
conn.Open();
using (var cmd = conn.CreateCommand())
{
cmd.CommandText = "...";
using (var reader = cmd.ExecuteReader())
{
while (reader.Read())
{
// ...
}
}
}
}
我习惯于为我的数据访问编写 try/catch/finally block ,但是,我正在接触“使用”,这似乎是一种更简单的方法。但是,我正在尝试弄清楚如何捕获可能发生的异常。
能否请您举例说明如何捕获异常?
编辑添加:
我被引导相信“使用”是我的 try/catch/finally block 的替代品。我知道使用不会捕获异常。那么这是如何替代的呢?
最佳答案
using
并不是为了捕获异常而设计的;它旨在为您提供一种简单的方法来将 try
/finally
包裹在需要处理的对象周围。如果您需要捕获和处理异常,那么您需要将其扩展为完整的 try
/catch
/finally
或放置一个包含 try
/catch
整个过程。
回答你的编辑(using
是 try
/catch
/finally
的替代品吗?)然后没有,它不是。大多数情况下,当使用一次性资源时,您不会立即处理异常,因为通常您无能为力。因此,它提供了一种方便的方法来确保资源得到清理,而不管您尝试做的事情是否有效。
通常,处理一次性资源的代码在太低的级别上工作,无法决定失败时的正确操作,因此将异常传播给调用者,调用者可以决定采取什么操作(例如重试、失败、日志等)。
您倾向于将 catch
block 与一次性资源一起使用的唯一地方是您要转换异常(我假设,这是您的数据访问层正在做的事情)。
关于c# - 你如何在 C# 中捕获 "using"的异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/518292/