如何使用VB添加重复的唯一ID时捕获CONSTRAINT异常

时间:2009-06-10 09:33:14

标签: .net database vb.net visual-studio-2008

我有一个问题,添加一个带有重复UNIQUE id的新ROW会抛出我无法总是捕获的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 :(得分:0)

您应该更正此代码,以避免添加重复的行。只是吞下错误(即使你可以)是一个坏主意。

答案 1 :(得分:0)

两件事,首先你怎么知道数据库INSERT命令是在第一个程序的上下文中执行的?我没有看到任何会强制更改回数据库的内容。您是否收到堆栈转储未处理的异常,表明它是从该例程调用的(但尚未处理)?否则,我会说INSERT很可能在该例程之后的某个时间才被执行。

其次,在我看来,DataGridView1_DataError无论如何都会压制错误。我相信_DataError事件将在返回导致执行INSERT的代码之前被调用,并且“e.ThrowException = False”被禁止以防止异常的任何重新传播。