Como capturar un error?

Buen da.

Tengo una conexin a nivel de aplicacin la cual la abro sin problemas, en una ventana para el ingreso de items, en el evento action de un pushbuton tengo el siguiente cdigo:

iitemid = ItemNextSequence()

if iitemid = -1 then
MsgBox(“no se pudo obtener secuencia…!”)
return
end if

dim lcodigo as String = TxtCodigo.Text
dim ldescripcion as String = TxtDescripcion.Text
dim liva as Boolean = ChkIva.Value
dim lpvp as Double = val(TxtPVP.Text)
dim lstock as Double = Val(TxtStock.Text)

try
Dim ps As PostgreSQLPreparedStatement = _
app.hdb.Prepare(“Insert into facturacion.item (itemid, codigo, descripcion, iva, costo, stock) Values($1, $2, $3, $4, $5, $6)”)

     ps.SQLExecute(iitemid, lcodigo, ldescripcion, liva, lpvp, lstock)
    
     app.hdb.SQLExecute("COMMIT")

Catch err as KeyNotFoundException
MsgBox(“Error al grabar”)
MsgBox (err.Message)

    If app.hdb.Error Then
     MsgBox("DB Error: " + app.hdb.ErrorMessage)
    Return 
    End If

End Try

La tabla item tiene un indice nico por el campo cdigo, el problema est cuando mando un cdigo repetido, no me salta ningn error, ejecuta todo el cdigo como si nada, tambin prob sin el try y el comportamiento es igual.

Cual es la forma correcta de capturar el error?

Saludos.
Mauricio.