Как обрабатывать исключения LINQ to SQL? - PullRequest
0 голосов
/ 28 января 2012

Привет! Я внедряю локальную базу данных в своем приложении WP7, и мне было интересно, как обрабатывать различные типы исключений SqlCeException, которые могут возникнуть при выполнении операции с базой данных.Например, я хотел бы показать определенное сообщение об ошибке, если была предпринята попытка удалить элемент, связанный внешним ключом, и другая ошибка, скажем, случайное необработанное исключение.

Мне кажется, что возможноИсключение может быть передано в статусе переключателя внутри блока catch следующим образом:

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

Кто-нибудь знает, как это реализовать, или, может быть, указывает мне где-нибудь, где я могу научиться обрабатывать эти исключения отдельно?*

Ответы [ 4 ]

2 голосов
/ 28 января 2012
try
{
    // something
}
catch(ForeignKeyException ex)
{
    // handle foreignkeyexception
}
catch(UnhandledException ex)
{
    // handle unhandledexception
}
2 голосов
/ 28 января 2012

Хотя у меня нет ответа, я всегда решал это, никогда не позволяя исключениям случиться. Я всегда проверяю перед , вставляя, что данные действительны. Я удостоверяюсь, что все уникальные индексы соблюдаются (имя пользователя, ...) и что все проблемы с внешними ключами были решены. Это, ИМХО, единственный вменяемый способ сделать это. Я не хотел бы создавать исключения и обрабатывать их, потому что никогда не мог быть уверен, что не поймаю слишком много исключений и тем самым скрываю реальные ошибки.

1 голос
/ 28 января 2012

Похоже, класс 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...
        //
    }
}
1 голос
/ 28 января 2012

Почему бы просто не иметь различный блок catch для каждого типа исключения, о котором вы заботитесь?

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