2013-07-16 3 views
0

У меня есть приложение, которое использует OleDB для подключения к базе данных Access. Я пытаюсь создать некоторую обработку ошибок для вставки повторяющихся записей, где есть уникальный индекс.Локальные исключения в OLEDBException -2147467259

Когда эта ошибка выбрасывается, я получаю код ошибки -2147467259 об исключении. Однако другие ошибки также дают одинаковый код ошибки; Например, полная база данных или столбец отсутствуют.

Есть ли способ определить между этими различными ошибками без использования самого сообщения об ошибке, которое, как говорит каждая часть, будет ненадежным.

Я просмотрел .innerexception, в случае вставки дубликатов нет внутреннего исключения.

Я также посмотрел на свойство .SQLState, похоже, что это старый метод, который действительно не используется в рамках 4.0. Я мог бы применить это, но я, скорее всего, буду использовать ошибку, а не мою желаемую попытку поймать.

Мой код на данный момент:

  Try 
       Sender.cmdOLEDB.ExecuteNonQuery() 
      Catch ex As OleDbException 

      End Try 
+1

** Поймайте общую ошибку **, затем выполните ** запрос **, чтобы проверить, существует ли другая запись с ** одинаковым идентификатором **. –

+0

@Adriano Ok Я рассмотрю это. По-прежнему кажется, что у меня могут быть проблемы с некоторыми другими ошибками в этом коде. – Pezzzz

ответ

0

На риск того, что человек, который настаивает на том, что ваши основные проблемы является реальной проблемой здесь ... БД является реальной проблемой здесь.

Я предполагаю, что у вас есть какой-то естественный ключ (иначе вы не получите дубликатов ключевых исключений), а не сгенерированный ключ. Я бы предложил изменить таблицу, поэтому вам не нужно беспокоиться о том, чтобы попытаться понять, почему ваша вставка не удалась из-за плохой ПК.

Я видел что-то подобное с этой логикой, где коллега реализован метод сохранения как:

try 
{ 
    insertCommand.ExecuteNonQuery(); 
} 
catch(Exception ex) 
{ 
    updateCommand.ExecuteNonQuery(); 
} 

Что это ... плохо.

+1

Добро пожаловать в SO :). В таблице хранятся тестовые данные, уникальный ключ - дата/время. Попытка поймать дублирующий ключ состоит в том, чтобы избежать доступа пользователей к дублирующим данным. Я не чувствую, что это фундаментальная проблема. – Pezzzz

+0

Спасибо :) Является ли дубликат данных на основе других полей или на основе даты? Я не имею в виду СУБД, но логически, что делает его дубликат? –

+0

Дубликат основан на дате времени, должна быть только одна запись за раз. Эти дубликаты будут созданы кем-то, импортирующим одни и те же данные дважды. – Pezzzz

Смежные вопросы