ho una domanda da farvi riguardo una transazione in asp.net (ado.net)
in una mia sub ho
Dim transazione As SqlTransaction
Dim sql4 As String
sql4 = "INSERT INTO assenze (id_per, data_in, motivo) VALUES (" & viewstate("osp") & ", '" & Left(viewstate("data_ps"), 10) & "', 'infortunio')"
Dim cmd4 As New SqlCommand(sql4, cnx)
Dim sql5 As String
sql5 = "SELECT MAX(id_ass) FROM assenze"
Dim cmd5 As New SqlCommand(sql5, cnx)
Dim id_max_ass As Integer
cnx.Open()
transazione = cnx.BeginTransaction
cmd4.Transaction = transazione
cmd5.Transaction = transazione
Try
cmd4.ExecuteNonQuery()
id_max_ass = cmd5.ExecuteScalar()
transazione.Commit()
Dim sql6 As String
sql6 = "UPDATE mia_tabella SET attivo=0, id_uuu=" & reparto.SelectedItem.Value & ", id_asse=" & id_max_ass & " WHERE id_rico=" & viewstate("id_cippa") & ""
Dim cmd6 As New SqlCommand(sql6, cnx)
cmd6.ExecuteNonQuery()
Response.Redirect("../moduli_comuni/auto_close.asp")
cnx.Close()
Catch ex As Exception
transazione.Rollback()
Response.Write("fallito")
cnx.Close()
End Try
la transazione funziona e anche l'operazione seguente, solo che mi piacerebbe fare tutto in un'unica transazione, anche se effettivamente il passaggio delicato è fare i primi 2 in contemporanea.
Non risco a fare tutto insiame perchè per il 3° comando ho bisogno un valore che ho solo dopo aver effettuato il 2° e non lo posso metterlo nella stringa sql. Se sposto prima del try il 3° comando che voglio integrare nella transazione, la stringa sql6 non è esatta in quanto non ho ancora id_max_ass.
Come posso fare per mettere tutto insieme ? non voglio usare una SP

Rispondi quotando