【问题标题】:How to handle LINQ to SQL Exceptions?如何处理 LINQ to SQL 异常?
【发布时间】:2012-01-27 21:53:24
【问题描述】:

您好,我正在我的 WP7 应用程序中实现一个本地数据库,并且想知道如何处理在数据库上运行操作时可能出现的不同类型的 SqlCeException。例如,如果尝试删除由外键绑定的项目,我想显示一条错误消息,而另一个错误则表示随机未处理的异常。

对我来说,似乎异常可以像这样在 catch 块内的 switch 语句中传递:

switch(myException)
{
   case ForeignKeyException:
      //Handle it this way...
      break;
   case UnhandledException:
      //Handle it another way...
      break;
}

有谁知道如何实现这一点,或者可以指出我可以学习如何分别处理这些异常的地方?

【问题讨论】:

    标签: c# linq-to-sql windows-phone-7 sql-server-ce windows-phone-7.1


    【解决方案1】:

    虽然我没有答案,但我总是通过不让异常发生来解决这个问题。我总是在插入数据之前检查 是否有效。我确保所有唯一索引都得到尊重(用户名,...),并且所有外键问题都得到了处理。恕我直言,这是唯一明智的做法。我不想产生异常并处理它们,因为我永远无法确定自己没有捕获太多异常,从而隐藏了真正的错误。

    【讨论】:

    • +1 我认为你的观点很好。现在我回去了,实现一种检查形式比依赖异常要好得多。我继续执行您所说的,效果很好。
    【解决方案2】:
    try
    {
        // something
    }
    catch(ForeignKeyException ex)
    {
        // handle foreignkeyexception
    }
    catch(UnhandledException ex)
    {
        // handle unhandledexception
    }
    

    【讨论】:

    • 知道如何区分不同的错误吗?我查找了 SqlCeException,但找不到可以检查的异常列表。 ForeignKeyException 是我为解释我的问题而编写的 peusdo 代码。
    【解决方案3】:

    为什么不为您关心的每种异常类型设置不同的 catch 块?

    try
    {
        ...
    }
    catch(a ae)
    {
      ...
    }
    catch(b ab) ......
    

    【讨论】:

      【解决方案4】:

      看起来 SqlCeException 类有一个 NativeError 属性,您可以打开它。

      http://msdn.microsoft.com/en-us/library/system.data.sqlserverce.sqlceexception.aspx

      catch (SqlCeException e)
      {
          // Use SqlCeException properties if you need specific
          // application logic depending on the error condition
          //
          if (25046 == e.NativeError /*SSCE_M_FILENOTFOUND*/)
          {
              // Error specific logic goes here...
              //
          }
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-01-03
        • 1970-01-01
        • 1970-01-01
        • 2011-07-12
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多