Как определить правильное нарушение ограничения на SQLite UpdateException?

У меня есть следующая проблема с моей локальной базой данных SQLite. Я пытаюсь обновить данные, хранящиеся в процессе синхронизации, с помощью онлайновой базы данных SQL-сервера. Хотя с синхронизацией нет проблем, я часто сталкиваюсь с ошибками при попытке обновить локальные значения. Например, могут быть нарушения с существующими ограничениями первичного ключа в каждой таблице. С другой стороны, также может быть нарушение уникального ключа на конкретном столе.

У меня вопрос, как выяснить, какой тип ошибки произошел.

Я ловлю обновление базы или вставляю как

catch(UpdateException ue)
{
    HandleUpdateException(ue);
}

Метод дескриптора выглядит следующим образом:

private void HandleUpdateException(UpdateException e)
{
    // get inner exception as SQLiteException
    var innerException = e.InnerException as SQLiteException;

    if(innerException != null)
    {
        switch(innerException.ErrorCode)
        {
            case SQLiteError.Constraint:
                // handle constraint-error here
                break;
            default:
                // log error
                break;
        }
    }
}

Как мне узнать, какая ошибка произошла? Важно знать, потому что обработка PK-нарушения совершенно иная, чем британское нарушение.

Я мог бы попытаться сделать

if(e.Message.Contains("unique")) // ...

или же

if(e.Message.Contains("foreign")) // ...

но я не люблю проверять "магические" строки на наличие ошибок.

Так что любая помощь будет оценена.

0 ответов

Другие вопросы по тегам