Porque Try Catch de VbNet no detecta un error en un SP luego de ejecutar un SELECT, pero si antes de él
tema enviado por vincent en Visual Basic .NET
tema iniciado el 22/06/2009
"Porque Try Catch de VbNet no detecta un error en un SP luego de ejecutar un SELECT, pero si un error antes del SELECT"
Saludos, tengo la siguiente situación:
Haciendo pruebas antes de instalar mi aplicacion VB.net que consulta para sus operaciones constantes SP's, detecte que si llamo a mis sp con ".ExecuteScalar()", si ocurre una error DESPUES de un SELECT dentro del SP, el mismo no es detectado por el CATCH de vb.net
Pero atencion si el error ocurre ANTES de un SELECT * from ...
el error si es reportado al try catch de vb.net.
(si la llamo con ".ExecuteNoQuery()" SI lo detecta siempre )
PORQUE si esta deteccion arbitraria del error por parte de vb.net con el ".ExecuteScalar()", no deberia reportarlo siempre???
Este comportamiento a tenerlo en cuenta!!!!
____________________________________________________________
Try
...BeginTransaction()
.
cmd1.ExecuteScalar() ----------------------> sp_Maestros
Id = CType(Cmd.Parameters(0).Value, Integer)
do while Condicion...
...
.
cmd2.ExecuteNonQuery() ------------------> sp_Detalles
end do
....Commit()
Catch ex As Exception
...Rollback()
Throw New MyExceptionDA(ex, .....)
Finally
...CerrarConexion()
End Try
____________________________________________________________
Si ocurre un error en sp_Maestros o sp_Detalles luego de un SELECT el
error no es atrapado por el catch en VB.NET y continua normalmente, por ejemplo,
pero si el error ocurre antes del SELECT mi Catch dentro
del codigo vb.net si lo detecta. A alguien le ocurrio algo similar???
Mejor lo explico con código.
____________________________________________________________
PROCEDURE sp_Maestros
@resultado int OUTPUT
@dato int
begin try
begin tran T1
operaciones INSERT....
execute SP1
Print 10/0 ------> este error SI lo atrapa el CATCH de VB.NET
SELECT * FROM Cliente WHERE...
Print 10/0 ------> este error NO LO ATRAPA el CATCH de VB.NEt
commit tran T1
end try
begin catch
rollback T1 ------> Este Rollback siempre se ejecuta
end catch
Me parece este comportamiento de lo mas raro, alguien podria hacer la prueba y o
decirme porque luego del SELECT se anula la posibilidad de atrapar el error
desde mi codigo vb.net?
Saludos y exitos !!!
Rolando