Sto cominciando ad usare questi due metodi, vi mostro un esempio del mio codice per vedere se ho capito bene il concetto:
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
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...

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?