我自学了C#,目前我正在开发一个try catch块。它是写入数据库。
try
{
//Write to Database
}
catch (SqlException ex)
{
//report issue
//close connection
}
catch (Exception ex)
{
//report issue
//close connection
}
finally
{
//close connection
}
是否还有其他应检查的异常?
我是否应该检查连接字符串是否失败?
或者SQLException本身就足够好了吗?
答案 0 :(得分:2)
如果您在using
,SqlConnection
和SqlCommand
(如果适用)周围放置了SqlDataReader
块,那么您不需要明确的try/catch
来确保处理任何事情。
using(var connection = new SqlConnection(connectionString)
using(var command = new SqlCommand(procedureName, connection)
{
//etc
}
要专门回答有关捕获SqlException
或Exception
的问题,答案是 - 是的,首先抓住SqlException
如果你会做某事SqlException
与任何其他例外的结果不同。但你可能不会。可能没有理由,所以不,我不会为SqlException
单独捕获。只有在你需要时才这样做。
这就留下了一个问题 - 你真的需要在这个方法中捕获任何异常吗?答案可能不是。如果抛出异常,using
将处置任何需要处理的内容,那么异常可以冒泡到任何称为它的方法。在某些时候,您需要记录它,但您不需要在每个方法的每一层都记录日志。例如,如果它是WCF服务,您只需记录调用服务方法时抛出的异常。
可能存在需要捕获异常的情况,以便您可以通过不同的方式做出响应。也许您正在查询多个数据集,如果一个数据集失败,您只需记录错误并返回空结果而不是导致下游失败。但那并不常见。
值得关注的是AOP - Aspect Oriented Programming。许多方法都需要异常日志记录,但它并不是这些类的功能。因此,有很多方法可以保留大多数类和方法中不相关但必要的代码。我链接到PostSharp,但我个人使用Windsor因为它提供了依赖注入和拦截器,它们使用异常处理之类的东西来包装方法调用。
答案 1 :(得分:0)
异常类是一个通用类,它将捕获所有异常