2009-06-10 9 views
0

重複するUNIQUE IDを持つ新しい行を追加すると、常に捕捉できないCONSTRAINTExceptionがスローされるという問題があります。ここに私のコードです。VBで重複した一意のIDを追加するときにCONSTRAINT例外をキャッチする方法

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

okですので、重複する行を追加しないようにするには、例外を処理するのではなく、事前にクエリを実行することをお勧めします。 – Tom

+0

製品IDについては、DBについてあまり知らないうちに、自動的に番号が付けられると思います。それは可能ですか? –

+0

これは信頼できる方法ではありません。直前にチェックしても、他の誰かが入ってこないようにして、同じプライマリキー値を追加したことを確認することはできません。あなたはDBの実行からのエラーに対処することができなければなりません。 – RBarryYoung

0

まず、データベースINSERTコマンドが最初の手順のコンテキスト内で実行されていることをどのように知っていますか?私はそこにデータベースに変更を強制的に戻すようなものは何も表示されません。そのルーチンから呼び出された(まだ処理されていない)ことを示すスタックダンプを持つ未処理の例外が発生していますか?そうでなければ、INSERTがそのルーチンの後のいつかまで実行されていない可能性が高いと私は言います。

第2に、DataGridView1_DataErrorがエラーをスケルチしているように見えます。私は、_DataErrorイベントが呼び出され、INSERTが実行されたコードに戻り、 "e.ThrowException = False"が例外の再伝播を防ぐために呼び出されることを信じています。

関連する問題