Hola a todos!

Por qué cuándo trato de conectarme a un servidor que no es mi máquina, me da
el siguiente error: “Timeout expired.  The timeout period elapsed prior to
completion of the operation or the server is not responding.” Estoy usando
VS2005 con SQLServer2000. La cadena de conexión que uso es esta: “Data
Source=SERVIDOR;Initial Catalog=DATABASE;User ID=USER;Password=PASSWORD”, si
me conecto a mi máquina todo funciona perfectamente.

Nos vemos…

 

Força Barça!!!

---------------------------

Ing. Yudiel Guerra C.

Dpto. Desarrollo Software
DeSoft S.A.

---------------------------

  _____  

From: [email protected] [mailto:[EMAIL PROTECTED] On Behalf Of Julio E.
Szabo
Sent: Friday, January 05, 2007 10:47
To: [email protected]
Subject: [puntonet] TransactionScope

 

Hola a todos, estoy probando hacer transacciones con TransactionScope, la
verdad que la sintaxis es bastante sencilla y no requiere de nada extra,
solo hacer uso de System.Transaction.

Ahora bien, estuve haciendo unas pruebas en mi maquina (Servidor local,
Windows XP SP 2, SQL Server 2000 Developer Edition) y funciona de
maravillas, para la comunicación con la DB, utilizo Enterprise Library 2.0.

 

Pero el problema es cuando quiero hacer exactamente lo mismo, pero en otra
maquina, es decir, lo ejecuto desde la mia pero me conecto a la Db de la
otra maquina, y esta tiene instalado lo mismo (Windows XP SP 2, SQL Server
2000 Developer Edition). Investigue un poco de esto y encontré que hay que
configurar el MSDTC, de la maquina donde se quiere realizar las
transacciones, con lo cual, marque los checks de Acceso desde la Red,
Permitir clientes remotos, Permitir Entrantes y Permitir Salientes, también
selecciona la opción No se requiere autenticación. Pero no hay caso, no
funciona. La verdad que busque por todos lados, pero no encontre nada, y
seguramente, alguno de ustedes, ya le ha tocado renegar con esto y me pueda
dar una mano.

 

Este es el Error que da:

 

An unhandled exception of type
'System.Transactions.TransactionAbortedException' occurred in
Microsoft.Practices.EnterpriseLibrary.Data.dll

 

Additional information: The transaction has aborted.

 

Este es el codigo que ejecuto en el Windows form

 

        Using transScope As New TransactionScope()

 

            Dim objDts As New DataService("Password=;Persist Security
Info=True;User ID=sa;Initial Catalog=Prueba;Data Source=PCServer01")

 

            ' inserta cuatro registro en la tabla clientes, el Id es
autonumerico

            Call objDts.ExecuteCommand("Insert into Clientes (Nombre) Values
('Valor1')") <== aca es donde da el Error

            Call objDts.ExecuteCommand("Insert into Clientes (Nombre) Values
('Valor2')")

            Call objDts.ExecuteCommand("Insert into Clientes (Nombre) Values
('Valor3')")

            Call objDts.ExecuteCommand("Insert into Clientes (Nombre) Values
('Valor4')")

 

            ' obtiene todos los registros recien insertados

            Dim objDt As DataTable = objDts.ExecuteCommandDt("Select * From
Clientes")

 

            ' por cada registro en Clientes, inserta otro en la tabla
Registros

            Dim objDtRow As DataRow = Nothing

            For Each objDtRow In objDt.Rows

                Call objDts.ExecuteCommand("Insert into Registros
(IdCliente, IdRegistro, Descripcion) Values (" & objDtRow.Item("IdCliente")
& ", 1, '" & objDtRow.Item("Nombre") & "')")

            Next

 

            ' Commit the transaction.

            Call transScope.Complete()

 

        End Using

 

Este es el Codigo de la clase DataService que se comunica con la DB a travez
de Enterprise Library 2.0

 

Dim objDb As SqlDatabase = Nothing

 

    '- sobrecargo el operador New, para obtener la CnnString

    '----------------------------------------------------------------------

    Public Sub New(ByVal pCnnString As String)

 

        '- crea la db

        objDb = New SqlDatabase(pCnnString)

 

    End Sub

 

    Public Sub ExecuteCommand(ByVal pStrCmm As String)

        objDb.ExecuteNonQuery(CommandType.Text, pStrCmm)

    End Sub

 

    Public Function ExecuteCommandDt(ByVal pStrCmm As String) As DataTable

 

        '- obtiene los datos solicitados

        Dim objDs As DataSet = objDb.ExecuteDataSet(CommandType.Text,
pStrCmm)

 

        '- devuelve

        Return objDs.Tables(0)

 

    End Function

 

Desde ya muchisimas gracias.

 

Saludos a todos ustedes,

 

 

Julio.

Responder a