Foros del Web » Programación para mayores de 30 ;) » .NET »

.net manejo de llamadas a procedimientos almacenados con IBM ISERIES DB2

Estas en el tema de .net manejo de llamadas a procedimientos almacenados con IBM ISERIES DB2 en el foro de .NET en Foros del Web. 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 ...
  #1 (permalink)  
Antiguo 30/09/2008, 13:06
Avatar de diegopedro  
Fecha de Ingreso: agosto-2006
Ubicación: Santiago
Mensajes: 120
Antigüedad: 17 años, 9 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
  #2 (permalink)  
Antiguo 01/10/2008, 09:24
Avatar de diegopedro  
Fecha de Ingreso: agosto-2006
Ubicación: Santiago
Mensajes: 120
Antigüedad: 17 años, 9 meses
Puntos: 0
Respuesta: .net manejo de llamadas a procedimientos almacenados con IBM ISERIES DB2

Favor Opiniones
__________________
Es facil apretar tornillos, pero lo complejo es saber que tornillo apretar
  #3 (permalink)  
Antiguo 06/10/2008, 11:10
Avatar de diegopedro  
Fecha de Ingreso: agosto-2006
Ubicación: Santiago
Mensajes: 120
Antigüedad: 17 años, 9 meses
Puntos: 0
Respuesta: .net manejo de llamadas a procedimientos almacenados con IBM ISERIES DB2

Favor opiniones
__________________
Es facil apretar tornillos, pero lo complejo es saber que tornillo apretar
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 08:28.