Transaction visual basic vb.net

di Anonimizzato11185 il
2 risposte
Ho scritto il seguente codice che dovrebbe andare ascrivere su una tabella del server(in questo momento in locale su un DB access)

Sto provando la Transaction con Commit e Rollback.

Ho scritto questo e sembra che funziona almeno il Commit.

Domanda: Ma il rollback serve a riprovare l' insert oppure ad annullarlo?

In realtà io voglio sapere se l' operazione è andata a buon fine oppure se c' è da rilanciare l'insert perchè il server magari ha avuto problemi o per casi di Timeout.


    Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
            Dim pippo
            pippo = TextBox1.Text.ToString
     
            Dim transaction As OleDbTransaction
            ' Start a local transaction
            'transaction = MyConnessione.BeginTransaction("SampleTransaction")
            transaction = MyConnessione.BeginTransaction()
            Try
     
                strSQL = "INSERT INTO " & "tbl" &
                                        "([Numero],[Descrizione]) " &
                                        "VALUES (?,?)"
     
     
                Dim cmdCommand As OleDbCommand = New OleDbCommand(strSQL, MyConnessione)
     
                ' Must assign both transaction object and connection
                ' to Command object for a pending local transaction.
     
                cmdCommand.Transaction = transaction
     
                cmdCommand.Parameters.Add(New OleDbParameter("@AAA", OleDbType.VarChar)).Value = "0" 'Trim(Carrello_Numero_Letto) '21 gennaio 2019
                cmdCommand.Parameters.Add(New OleDbParameter("@BBB", OleDbType.VarChar)).Value = Trim(pippo)   '21 gennaio 2019
     
                cmdCommand.ExecuteNonQuery()
                transaction.Commit()
     
     
     
            Catch ex As Exception
                transaction.Rollback()
     
                FileClose(1)
                FileOpen(1, "LOG Errori" & ".txt", OpenMode.Append, , , )    'Open "ParametriTest.ini" For Input As 1
                PrintLine(1, ex.Message & " Non riesco a connettermi alla Tabella  ")
                FileClose(1)
                FileClose(1)
                FileOpen(1, "Trace" & ".txt", OpenMode.Append, , , )    'Open "ParametriTest.ini" For Input As 1
                PrintLine(1, strSQL)
                FileClose(1)
     
     
            End Try
     
        End Sub

2 Risposte

  • Se transaction.Commit() è andata a buon fine, allora l'esecuzione del codice non è passata dal Catch ed è tutto a posto.

    Il rollback ti annulla la insert se si è generata un'eccezione in un punto dopo BeginTransaction() e prima di Commit()

    Comunque anche transaction.Rollback() andrebbe scritto dentro un blocco Try/Catch all'interno del primo Catch
  • Ok provo
Devi accedere o registrarti per scrivere nel forum
2 risposte