Transazioni

mercoledì 22 novembre 2006 - 18.52

fabiof Profilo | Newbie

Ciao,
E' possibile definire una transazione in una funzione principale che poi abbia influenza su funzioni richiamate dalla principale?

Es.
Dim cn2 As New System.Data.SqlClient.SqlConnection
Dim cmd As New System.Data.SqlClient.SqlCommand
Dim myTrans As SqlTransaction

cn2.ConnectionString = GblConnectionString
cn2.Open()
cmd.Connection = cn2

myTrans = cn2.BeginTransaction
cmd.Transaction = myTrans


If Not Esegui_Query(cn2, cmd) Then
myTrans.Rollback()
Exit Sub
End If

Ho provato così, ma la transazione non agisce sulle modifice fatte nella funzione Esegui_Query, probabilmente sbaglio in qualche cosa.


ysdemarc Profilo | Expert

non vedo myTrans.Commit() se la tua routine Esegui_Query va bene...
potrebbe essere questo il problema?


Vincenzo
Programmatore sbilenco

fabiof Profilo | Newbie

Scusa, non ho messo il commit quà, perchè la funzione prosegue sulla falsa riga del codice pubblicato
e poi in fondo faccio il commit.
In pratica nella funzione che chiamo eseguo la query, poi torno alla funzione principale, così per diverse volte.
Mi sono accorto però che se una delle query fallisce, lui da errore, torna alla fun. principale fa il rollback ma questo non viene più sentito dalle modifiche al db fatte.nelle query precedenti che pure sono sotto transazione.

ysdemarc Profilo | Expert

Allora guardando così sembra giusto...

suppongo che dentro l'Esegui_Query utillizi cmd.Execute o cmd.ExecuteNonQuery

Se dentro sta routine fai letture probabilemte è l'IsolationLevel che devi cambiare...

... vediamo se magari il sig. Lorenzo Benaglia ti risponde.. lui avrà sicuramente la soluzione
Vincenzo
Programmatore sbilenco
Partecipa anche tu! Registrati!
Hai bisogno di aiuto ?
Perchè non ti registri subito?

Dopo esserti registrato potrai chiedere
aiuto sul nostro Forum oppure aiutare gli altri

Consulta le Stanze disponibili.

Registrati ora !
Copyright © dotNetHell.it 2002-2025
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5