Buenas a todos los foristas
Necesito saber el funcionamiento o que alguien me guie un poco respecto al manejo de procedimeintos de almacenados db2 con asp.net. les detallo mi inquietud.
Tengo un PRC que realiza dos insert el segundo obligo una caida, para que realize un roolback ya que declare el bloque de forma atomica.
CREATE PROCEDURE SHEMA.INSERTA (IN PARAM_ID decimal(3,0))
LANGUAGE SQL
BEGIN
BEGIN ATOMIC
INSERT INTO SHEMA.PRUEBA (ID_) VALUES (PARAM_ID);
--GENERO ERROR A PROPOSITO
INSERT INTO prueba (ID_) VALUES (PARAM_ID);
END;
END;
Cuando realizo un CALL SHEMA.INSERTA (2) desde inavigator, el resultado de la tabla es cero inserciones, hasta alli todo bien.
El problema empieza cuando lo trabajo con asp.net
Dim cnco As OBJODBC.OdbcConnection = New OBJODBC.OdbcConnection("dsn=;uid=;pwd=;Data Source=shema")
Dim Comandoco As New OBJODBC.OdbcCommand
Try
Comandoco.Connection = cnco
cnco.Open()
Comandoco.CommandType = Data.CommandType.StoredProcedure
Comandoco.CommandText = "call shema.INSERTA(?)"
Comandoco.Parameters.Add("PARAM_ID", Data.Odbc.OdbcType.Decimal, 3).Value = 6
Comandoco.ExecuteNonQuery()
Catch ex As Exception
Response.Write(ex.Message)
Finally
If (Not cnco Is Nothing) Then
cnco.Close()
End If
cnco.Dispose()
Comandoco.Dispose()
End Try
Al ejecutarce ocurre una exception, pero inserta en la tabla 1 registro o osea no hace roolbak(antecedente tengo creada la agenda para esa tabla).
Realize lo siguiente
Dim cnco As OBJODBC.OdbcConnection = New OBJODBC.OdbcConnection("dsn=;uid=;pwd=;Data Source=shema")
Dim Comandoco As New OBJODBC.OdbcCommand
Dim myTrans As OBJODBC.OdbcTransaction = Nothing
Try
Comandoco.Connection = cnco
cnco.Open()
myTrans = cnco.BeginTransaction
Comandoco.Transaction = myTrans
Comandoco.CommandType = Data.CommandType.StoredProcedure
Comandoco.CommandText = "call SHEMA.INSERTA(?)"
Comandoco.Parameters.Add("PARAM_ID", Data.Odbc.OdbcType.Decimal, 3).Value = 6
Comandoco.ExecuteNonQuery()
Catch ex As Exception
Response.Write(ex.Message)
Finally
If (Not cnco Is Nothing) Then
cnco.Close()
End If
cnco.Dispose()
Comandoco.Dispose()
End Try
Lo ejecuto y realiza el roolback, cero insert a la tabla
Mi pregunta es
- ¿Estara bien la forma de controlar las transacciones desde asp.net?
- Si falta roolback o commit el begin atomic hace ese trabajo
- ¿ Si tienen un ejemplo mas concreto se los agradecedia?
- Existira algo similar al try cash de PL/SQL oracle o p/sql o PL y manejo de excepciones o errores.
- La gran mayoria de paper me indican esta forma, pero no se si es la mas recomendable.
Opiniones Plis Urgente
Gracias