Buongiorno a tutti, volevo un parere sul mio codice.
La sub RegistraDati non gestisce l'errore, ma eventualmente lo restituisce a RegistraDati_1_2, fin qui tutto ok.
Ho messo 2 try, perchè anche la connessione potrebbe andare in errore.
Nella sub RegistraDati, ho utilizzato 2 Using cmd per registrare i dati di 2 oggetti diversi, quindi 2 tabelle diverse. Il codice funziona perfettamente.
Il dubbio che mi è venuto è questo:
il codice fa il dispose dell'oggetto cmd e poi esegue il commit della transazione trs.
Questo vuol dire che i dati vengono gestiti dalla transazione e i vari command (in questo caso 2 oggetti con lo stesso nome), possono essere "distrutti"?
Private Sub RegistraDati_1_2()
Try
Dim stringaConnessione As String = "Recupera Stringa Connessione"
Using cn As New SqlConnection(stringaConnessione)
cn.Open()
Using trs As SqlTransaction = cn.BeginTransaction
Try
RegistraDati("ClasseConIDatiDaRegistrare1", "ClasseConIDatiDaRegistrare2", cn, trs)
trs.Commit()
Catch ex As Exception
trs.Rollback()
Throw New ArgumentException(ex.Message)
End Try
End Using
End Using
MessageBox.Show("Dati salvati correttamente", "MiaApp", MessageBoxButtons.OK, MessageBoxIcon.Information)
Catch ex As Exception
MessageBox.Show(ex.Message, "MiaApp", MessageBoxButtons.OK, MessageBoxIcon.Error)
End Try
End Sub
Public Shared Sub RegistraDati(ByVal dati1 As String, dati2 As String, cn As SqlConnection, trs As SqlTransaction)
Dim q1 As String = "INSERT INTO...."
Dim q2 As String = "INSERT INTO...."
'Inserisco i dati del primo oggetto nel DB
Using cmd As New SqlCommand(q1, cn, trs)
With cmd
'tutti i parametri per l'insrt
.ExecuteScalar() 'se ho bisogno di recuperare l'id
End With
End Using 'cmd
'Inserisco i dati del secondo oggetto nel DB
Using cmd As New SqlCommand(q2, cn, trs)
With cmd
'tutti i parametri per l'insrt
.ExecuteScalar() 'se ho bisogno di recuperare l'id
End With
End Using 'cmd
End Sub