Ver Mensaje Individual
  #1 (permalink)  
Antiguo 30/09/2008, 13:06
Avatar de diegopedro
diegopedro
 
Fecha de Ingreso: agosto-2006
Ubicación: Santiago
Mensajes: 120
Antigüedad: 18 años, 6 meses
Puntos: 0
.net manejo de llamadas a procedimientos almacenados con IBM ISERIES DB2

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
__________________
Es facil apretar tornillos, pero lo complejo es saber que tornillo apretar