Esta es otra forma de realizar procesos transaccionales utilizando componentes COM sin tener que registrar archivos por diario, nota esto me funciona con SQL Server, puedes probar con el 400 a ver que pasa
 
Saludes
 
Hector Arias A.
 
 

Imports System.EnterpriseServices

Imports System.Windows.Forms

Imports System.Data.SqlClient

<Transaction(TransactionOption.Required)> _

Public Class clsTrans1

Inherits ServicedComponent

Public Sub EjecutaTransaccion(ByVal SQL1 As String, ByVal SQL2 As String)

Dim d As New clsTrans2()

 

If HolaTr1(SQL1) And d.HolaTr2(SQL2) Then

ContextUtil.SetComplete()

Else

ContextUtil.SetAbort()

End If

End Sub

 

Public Function HolaTr1(ByVal SQL As String) As Boolean

Dim conn As New SqlConnection("data source=A3S11 localhost;Initial Catalog=northwind; uid =sa;pwd =")

MessageBox.Show("insertando en Tr1")

Dim comm As New SqlCommand(SQL, conn)

conn.Open()

Try

comm.ExecuteNonQuery()

ContextUtil.SetComplete()

'd.Dispose()

Catch ex As Exception

MessageBox.Show("en 1: " & ex.Message)

ContextUtil.SetAbort()

Return False

Finally

If conn.State <> ConnectionState.Closed Then

conn.Close()

End If

End Try

Return True

End Function

End Class

<Transaction(TransactionOption.Required)> _

Public Class clsTrans2

Inherits ServicedComponent

Public Function HolaTr2(ByVal SQL As String) As Boolean

Dim conn As New SqlConnection("data source=A3S11 localhost;Initial Catalog=northwind; uid =sa;pwd =")

MessageBox.Show("insertando Tr2")

Dim comm As New SqlCommand(SQL, conn)

conn.Open()

Try

comm.ExecuteNonQuery()

ContextUtil.SetComplete()

Catch ex As Exception

MessageBox.Show("en 2: " & ex.Message)

ContextUtil.SetAbort()

Return False

Finally

If conn.State <> ConnectionState.Closed Then

conn.Close()

End If

End Try

Return True

End Function

End Class



[EMAIL PROTECTED] wrote:

Alguien esta usando OLEDB para conectarse al AS400.  Os cuento,  estamos accediendo
por OLEDB con .NET a la base de datos correctamente. Pero el problema lo tenemos con
las transacciones que no las esta ejecutando o deshaciendo tanto en el ROLLBACK como
con el COMMIT.

No se si el problema esta en la conexi�n  o con alg�n par�metro que no tenemos definido
correctamente el  As400 (tenemos  v5.2).

Las cadenas de conexi�n son -->

PRIMERA
cn.ConnectionString="Provider=IBMDA400;Autocommit=0;Data Source=RECORDDE.recordrentacar.net;User id=PERE;Password=elpere;";

SEGUNDO
cn.ConnectionString="Provider=IBMDA400.DataSource.1;Persist Security Info=False;User ID=PERE;Password=elpere;Data Source=RECORDDE;Protection Level=None;Extended Properties='';Initial Catalog=RECORDDE;Transport Product=Client Access;SSL=DEFAULT;Force Translate=65535;Default Collection=PERE;Convert Date Time To Char=TRUE;Catalog Library List=RECFSQL;Cursor Sensitivity=3";


Si os sirve tb de referencia este es un ejemplo TRANSACCI�N


private void Button1_Click(object sender, System.EventArgs e)
                {
                        //iniciamos la conexion
                        cn.ConnectionString="Provider=IBMDA400;Autocommit=0;Data                                                                           Source=RECORDDE.recordrentacar.net;User id=PERE;Password=elpere;";                                         cn.Open();
                        //Creamos transaccion y comando
                        System.Data.OleDb.OleDbCommand cmd = new OleDbCommand();
                        System.Data.OleDb.OleDbTransaction transaccion;
                        //iniciamos la transaccion
                        transaccion = cn.BeginTransaction();
                        try
                        {
                                string strSQL = "INSERT INTO RECFSQL.AUT_SIS" +
                                        "(SISTEMA_ID, SISTEMA) " +
                                        " VALUES ('"+TextBox1.Text+"','prueba')";
           
                                //Asignamos Conexion, SQL y transaccion
                                cmd.Connection = cn;
                                cmd.CommandText = strSQL;
             ! ;                   cmd.Transaction = transaccion;
                                //Realizamos la inserci�n
                                int kk = (int)cmd.ExecuteNonQuery();

                                throw new Exception();

                                //finalizamos la transaccion
                                transaccion.Commit();
                        }
                        catch (Exception err)
                        {
!                                 Response.Write("ERROR-->" + err.Message);
                                transaccion.Rollback();

                                Response.Write("<BR> ha ejectuado el ROLLBACK");
                        }
                        cn.Close();
                }
!         }


Gracias  NET.


=======================================================
 La originalidad no esta en el "HECHO", esta en la"SOLUCI�N"
=======================================================
  .~.
 /V\   L   I   N   U   X
// \\ >Phear the Penguin<
/(   )\
^^-^^
Pon un Pinguino en TU VIDA.COM
Pere Soria
Dpto. de Inform�tica
Telf.    +34 964343008
E-mail: [EMAIL PROTECTED]
http://www.recordrentacar.com
Record Rent a Car S.A.



��� Antivirus � Filtros antispam � 6 MB gratis
��� �Todav�a no tienes un correo inteligente?

Responder a