捕获数据库异常

本文关键字:异常 数据库 | 更新日期: 2023-09-27 18:05:17

所以我在设计一个Web Service当然;我需要这个服务自动写入一个数据库。这很直接;但显然Sql有不友好的倾向。

在故障排除时几乎会造成一场噩梦,更不用说通过Web Service将使调试更像一场噩梦。

所以我在网上查了一下,偶然发现了一篇关于Stack Overflow的文章,文章谈到了一个SqlHelper类,它实际上有一个巨大的列表:

public static bool IsDuplicateId(SqlException sex)
{
    return (sex.Number == 2601);
}

所以实现会很乏味,因为你必须调用所有这些方法。然而,有人回答:

switch (e.Number)
    case 2601:
         // Do Something
         break;
    default:
        throw;
所以我想为什么不创建一个来处理这些可能的错误。考虑到这个特殊的实现:
public class SqlExceptionHelper
{
    public SqlExceptionHelper(SqlException sqlException)
    {
        // Do Nothing.
    }
    public static string GetSqlDescription(SqlException sqlException)
    {
        switch (sqlException.Number)
        {
             case 21:
                 return "Fatal Error Occurred: Error Code 21.";
             case 53:
                 return "Error in Establishing a Database Connection: 53.";
             default
                 return ("Unexpected Error: " + sqlException.Message.ToString());
         }
     }
}
所以我的想法是我有一个,可以被重用来检测一些常见的错误;在其他类中,我只需要using SomeNamespace.ExceptionHelpers;,我可以实现这样的东西:
public class SiteHandler : ISiteHandler
{
     public string InsertDataToDatabase(Handler siteInfo)
     {
          try
          {
              // Open Database Connection, Run Commands, Some additional Checks.
          }
          catch(SqlException exception)
          {
             SqlExceptionHelper errorCompare = new SqlExceptionHelper(exception);
             return errorCompare.ToString();
          }
     }
}

所以本质上它应该处理所有那些可爱的异常;但我开始想这不太好返回异常作为返回是好的吗?这本身会是坏事吗?或者,这真的是通过服务处理此类异常捕获的最佳方式吗?

所以我的问题归结为:

       Is this the best way to handle error catching through a Service?

谢谢你的帮助

捕获数据库异常

理想情况下,web服务应该返回相关的HTTP状态码,而不是异常。这些通常在200 (OK), 400(用户可以自己修复的错误)或500(服务器错误-这些也可以自动重试)。

根据返回的数据库错误,可以将其转换为适当的HTTP状态码。如果您认为对用户有帮助,可以将错误代码的描述设置为异常消息。