Как перехватить исключение CONSTRAINT при добавлении дублированного уникального идентификатора с VB - PullRequest
0 голосов
/ 10 июня 2009

У меня проблема с тем, что при добавлении новой строки с дублирующимся уникальным идентификатором возникает исключение CONSTRAINTException, которое я не всегда могу поймать. Случайное общее исключение останавливает мое программное обеспечение VB, иногда перехватывает работу вот мой код.

Private Sub BindingNavigatorAddNewItem_MouseUp()
      try
      DataGridView1.CurrentRow.Cells(0).Value = InputBox("give new product id")
      Catch ex As Exception
        MessageBox.Show("error ") <-- never comes here!!
      End Try

end sub
Private Sub DataGridView1_DataError(..) Handles DataGridView1.DataError

        e.ThrowException = False <-- randomly comes here!!
        Dim v As DataGridView = CType(sender, DataGridView)
        v.Rows(e.RowIndex).Cells(e.ColumnIndex).ErrorText = "The value is wrong"
        v.BeginEdit(False)
        MessageBox.Show("error 2") 

end sub

Ответы [ 2 ]

0 голосов
/ 11 июня 2009

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

Во-вторых, мне кажется, что DataGridView1_DataError все равно устранит ошибку. Я полагаю, что событие _DataError будет вызвано до того, как оно вернется к коду, который вызвал выполнение INSERT, и что «e.ThrowException = False» настроено для предотвращения любого повторного распространения исключения.

0 голосов
/ 10 июня 2009

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...