Foros del Web

Foros del Web (http://www.forosdelweb.com/)
-   ASPX (.net) (http://www.forosdelweb.com/f78/)
-   -   .NET y Transcacciones (http://www.forosdelweb.com/f78/net-transcacciones-495079/)

ferblaca 04/06/2007 02:27

.NET y Transcacciones
 
Hola !

tengo una aplicación WEB con dos proyectos de clases que corresponden a los proyectos de Negocio y datos que son los que utilizo desde el proyecto WEB para hacer los accesos a BBDD (oracle) para obtener,insertar,modificar,borrar.

Pues bien, necesito controlar las Transcciones de las consultas de datos que hago desde la página WEB sin utilizar COM+. Cual es la mejor forma de hacerlo?

Saludos!

Developer9 04/06/2007 14:02

Re: .NET y Transcacciones
 
Cuando dices " necesito controlar las Transcciones " exactamente a que te refieres? A que no tengan errores?

Yaraher 04/06/2007 14:23

Re: .NET y Transcacciones
 
Supongo que se refiere a la parte donde comprueba si las operaciones se realizan cumpliendo el modelo ACID.

Si no me equivoco, uno de los Application Blocks del Enterprise Suite de MS está orientado a Transacciones. Lo utilicé hace casi tres o cuatro años, pero me parece que todavía está ahí, y te permite control tipo Rollback, Commit y similares sobre lo que trabajen tus componentes transaccionales.

ferblaca 05/06/2007 00:41

Re: .NET y Transcacciones
 
Hola y gracias por responder,

me refiero a controlar las transacciones de manera que si borro datos de una tabla y en el siguiente acceso a datos intento borrar otroa registros y me da error, pues entonces que la primera inserción no se realice, es decir, que no se produzca el commit.

Tengo un proyecto web y dos proyectos VB de clases con los que hago el acceso a datos.

Os pongo un ejemplo:

Parte WEB:

<html> ....
<script runat=server>...
i = obj.Borrar(g_empCodigo, m_grcCodigo, m_prdCodigo, g_idiCodigo)
...
</script>...
</html>


Parte Negocio (akí intento controlar las transacciones):
************************************************
Public Function Borrar(ByVal in_empCodigo As String, ByVal in_grcCodigo As String, ByVal in_prdCodigo As String, ByVal in_idiCodigo As String) As Integer

Using scope As New System.Transactions.TransactionScope()
Try
//hace el borrado de la primera tabla
Borrar = m_Obj_Idi.Borrar(in_empCodigo,in_grcCodigo,in_prdC odigo, "")
//en este borrado da error por FK a otra tabla
Borrar = m_Obj.Borrar(in_empCodigo, in_grcCodigo, in_prdCodigo)

scope.Complete()

Catch Err As Exception
scope.Dispose()
End Try
End Using
End Function
************************************************** **

Me está pasando lo siguiente, cuando ejecuto la anterior función desde WEB me hace la primera consulta, pero en la segunda me está dando una excepción pq intento borrar un registro con una clave ajena a otra tabla (es lógico que salte excepción) por lo que no pasa por la instrucción scope.Complete() y aún así no controla la transacción dejando borrada el primer registro ...

Sabéis pq puede ser?

saludos.

Developer9 05/06/2007 08:13

Re: .NET y Transcacciones
 
Tienes que crear ejecutar todas tus sentencias sql dentro de una transacción.

Debes de crear un procedimiento almacenado donde pongas toditos los insert, update, delete y al inicio le pones BEGIN TRAN y al final le pones COMMIT TRAN

Y despues de cada insert, update o delete poner:

Código:

IF (@@error <> 0)
BEGIN
        ROLLBACK TRAN                               
        RETURN
END

Con ello si la sentencia tiene un error hace un rollback a las ejecuciones anteriores y sale

Siempre que inicies un BEGIN TRAN debes de hacer un commit tran o rollback tran porque en la transaccion las tablas que hayas afectado se bloquean y nadie más las puede acceder, y si la transacción no termina tus tablas quedarán bloqueadas

Mucha suerte

ferblaca 06/06/2007 09:57

Re: .NET y Transcacciones
 
Al final lo he conseguido y al parecer era porque estaba usando la clase ADODB para crear los objetos connection,command .... ahora lo he hecho con la clase System.Data.Common.factory para crear los objetos y todo ha funcionado a la primera.

Gracias a todos.


La zona horaria es GMT -6. Ahora son las 22:24.

Desarrollado por vBulletin® Versión 3.8.7
Derechos de Autor ©2000 - 2026, Jelsoft Enterprises Ltd.