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