我有一个问题,添加一个带有重复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
答案 0 :(得分:0)
您应该更正此代码,以避免添加重复的行。只是吞下错误(即使你可以)是一个坏主意。
答案 1 :(得分:0)
两件事,首先你怎么知道数据库INSERT命令是在第一个程序的上下文中执行的?我没有看到任何会强制更改回数据库的内容。您是否收到堆栈转储未处理的异常,表明它是从该例程调用的(但尚未处理)?否则,我会说INSERT很可能在该例程之后的某个时间才被执行。
其次,在我看来,DataGridView1_DataError无论如何都会压制错误。我相信_DataError事件将在返回导致执行INSERT的代码之前被调用,并且“e.ThrowException = False”被禁止以防止异常的任何重新传播。