C#从数据库查询中降级的最佳方法

时间:2016-05-07 00:33:11

标签: c# exception exception-handling

我自学了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本身就足够好了吗?

2 个答案:

答案 0 :(得分:2)

如果您在usingSqlConnectionSqlCommand(如果适用)周围放置了SqlDataReader块,那么您不需要明确的try/catch来确保处理任何事情。

using(var connection = new SqlConnection(connectionString)
using(var command = new SqlCommand(procedureName, connection)
{
    //etc
}

要专门回答有关捕获SqlExceptionException的问题,答案是 - 是的,首先抓住SqlException 如果你会做某事SqlException与任何其他例外的结果不同。但你可能不会。可能没有理由,所以不,我不会为SqlException单独捕获。只有在你需要时才这样做。

这就留下了一个问题 - 你真的需要在这个方法中捕获任何异常吗?答案可能不是。如果抛出异常,using将处置任何需要处理的内容,那么异常可以冒泡到任何称为它的方法。在某些时候,您需要记录它,但您不需要在每个方法的每一层都记录日志。例如,如果它是WCF服务,您只需记录调用服务方法时抛出的异常。

可能存在需要捕获异常的情况,以便您可以通过不同的方式做出响应。也许您正在查询多个数据集,如果一个数据集失败,您只需记录错误并返回空结果而不是导致下游失败。但那并不常见。

值得关注的是AOP - Aspect Oriented Programming。许多方法都需要异常日志记录,但它并不是这些类的功能。因此,有很多方法可以保留大多数类和方法中不相关但必要的代码。我链接到PostSharp,但我个人使用Windsor因为它提供了依赖注入和拦截器,它们使用异常处理之类的东西来包装方法调用。

答案 1 :(得分:0)

异常类是一个通用类,它将捕获所有异常