Sto cominciando ad usare questi due metodi, vi mostro un esempio del mio codice per vedere se ho capito bene il concetto:
Utilizzando questo codice dovrei essere sicuro che il nuovo utente venga realmente salvato nel Db solo ed esclusivamente se la ExecuteQuery(che esegue la INSERT "nella transaction" e non nel Db) va a buon fine. Inoltre, utilizzando la query parametrica, dovrei essere sicuro che qualsiasi carattere(vedi apici) inserito non mi possa creare problemi di SQL-Injection, non ho la necessità di fare una Replace degli apici...codice:Dim conn As New OleDb.OleDbConnection(StringaConnessione) conn.Open() Dim transaction As OleDb.OleDbTransaction = conn.BeginTransaction() Dim cmd As New OleDb.OleDbCommand("INSERT INTO utenti (cognome, nome) VALUES (@cognome, @nome)", conn, transaction) Try cmd.Connection = conn cmd.Parameters.Add("@cognome", OleDb.OleDbType.VarChar).Value = Cognome.Text cmd.Parameters.Add("@nome", OleDb.OleDbType.VarChar).Value = Nome.Text If cmd.ExecuteNonQuery() > 0 Then transaction.Commit() MessageBox.Show("Nuovo utente salvato con successo.", "Utente salvato", MessageBoxButtons.OK) Else transaction.Rollback() End If Catch MessageBox.Show("Si è verificato un errore durante il salvataggio dei dati per il nuovo utente." & vbNewLine & Err.Description, "Errore" & Err.Number, MessageBoxButtons.OK, MessageBoxIcon.Error, MessageBoxDefaultButton.Button1) transaction.Rollback() Finally cmd.Connection.Close() cmd = Nothing conn.Close() conn = Nothing End Try
Domanda1: Ho capito tutto, niente o poco?
Domanda2: la transaction ha senso solo per una INSERT, UPDATE e DELETE? oppure ha senso anche per una SELECT?
Domanda "di curiosità": Se sto facendo un elenco di 10.000 prodotti(p.es), è ovvio che ci vorrà un certo tempo. Se nel frattempo un utente di un'altra postazioni inserisce il prodotto numero 10.001 c'è un modo di farlo rientrare nella SELECT che ho fatto inizialemente sui 10.000 prodotti?
![]()

?
Rispondi quotando