Hola,
tengo un proceso 'complejo' y quiero gestionarlo con transacciones,
pero no se como hacerlo. Principalmente tengo el problema que creo
unos registros en una tabla y que como no se su ID, una vez creados
los tengo que volver a leer para tener el ID y poder asignar registros
relacionados, por lo que tengo muchos objetos conexión y tal.
os pongo mi caso muy simplificado y omitiendo mucha cosa que no aporta
nada. gracias
Dim v_HoraGeneracion As DateTime = Now 'hora que
pondremos en todos los registros generados para luego
identificarlos...
Dim v_oConn As New
SqlConnection(Global.ttt.My.Settings.airgestConnectionString)
Dim v_oConn2 As New
SqlConnection(Global.ttt.My.Settings.airgestConnectionString)
Dim v_oConn3 As New
SqlConnection(Global.ttt.My.Settings.airgestConnectionString)
Dim v_cmd As New SqlCommand("", v_oConn)
Dim v_cmd2 As New SqlCommand("", v_oConn)
Dim v_cmd3 As New SqlCommand("", v_oConn)
Dim v_r, v_r3 As SqlDataReader
Dim myTrans, mytrans2, mytrans3,
mytrans4, mytrans5 As SqlTransaction
'Generamos las cabeceras de factura por ejemplo
v_cmd.CommandText = "INSERT t_facturas (campo1,
campo2, campoAux) " & _
" (SELECT campo1, campo7, '" &
FechaHoraSQLServer(v_HoraGeneracion) & "’ FROM t_tabla1 where …”
v_oConn.Open()
myTrans = v_oConn.BeginTransaction() 'marcamos el
inicio de la transaccion.
v_cmd.ExecuteNonQuery()
v_oConn.Close()
'primero buscmaos las facturas que
hemos generado, para tener el ID
v_cmd.CommandText = "SELECT * from t_facturas where
campoaux ='" & FechaHoraSQLServer(v_HoraGeneracion) & "' “
"
v_oConn.Open()
v_r = v_cmd.ExecuteReader
Do While v_r.Read 'para cada factura que hemos
generado antes, metemos sus lineas...
' BEGIN TRANSACTION
'metemos los vuelos.
v_cmd2.CommandText = "INSERT t_lineas (fk_factura,
campo1) (select “ & v_r(“id”) & “ campo1 from t_tabla2)"
v_oConn2.Open()
mytrans2 = v_oConn2.BeginTransaction() 'marcamos
el inicio de la transaccion.
v_cmd2.ExecuteNonQuery()
v_oConn2.Close()
'ahora metemos un detalle sobre las líneas, por lo
que las buscamos para saber su id..
v_cmd3.CommandText = "SELECT bla bla bla”
v_oConn3.Open()
v_r3 = v_cmd3.ExecuteReader
Do While v_r3.Read
'para cada línea metemos mas detalle…
v_cmd2.CommandText = "INSERT t_detalle_linea
( fk_linea, campo1 ) (select '" & v_r3("id_linea") & "', campo1 from
t_tabla3 Where blabla)"
v_oConn2.Open()
mytrans3 = v_oConn3.BeginTransaction()
'marcamos el inicio de la transaccion.
v_cmd2.ExecuteNonQuery()
v_oConn2.Close()
Loop
v_r3.Close() 'cerramos conexiones y demás...
v_oConn.Close()
Loop
v_r.Close() 'cerramos conexiones y demás...
myTrans.Commit() 'fin transacciones
mytrans2.Commit() 'fin transacciones
mytrans3.Commit() 'fin transacciones
v_oConn.Close()
End If
End If
Leer las respuestas