Ciao.
Dipende molto da come accedi al DB, quanto conosci SQL, ...
Ti giro un esempio semplice da capire, anche se non è il migliore a livello di performance (fai una query per ogni riga da aggiornare):
using (var connection = new OleDbConnection(...))
{
connection.Open();
using (var transaction = connection.BeginTransaction())
{
try
{
var query = "UPDATE MAG_ARTICOLI SET CAMPO = @campo, SEGNO = @segno WHERE ID = @id AND ROWVERSION = @rowversion";
using (var command = new OleDbCommand(query, connection))
{
foreach (var riga in RigheDaAggiornare)
{
command.Parameters.Clear();
command.Parameters.Add(new OleDbParameter("@campo", <valoreCampo>);
command.Parameters.Add(new OleDbParameter("@segno", <valoreSegno>);
command.Parameters.Add(new OleDbParameter("@id", <valoreId>);
command.Parameters.Add(new OleDbParameter("@rowversion", <valoreRowversion>);
var righeAggiornate = command.ExecuteNonQuery();
if (righeAggiornate != 1)
{
// Non ha aggiornato 1 riga come ci si aspettava, problema di concomitanza!
throw new MyConcurrencyException(<datiCheTiServono>);
}
}
// Tutte le righe aggiornate correttamente, committo
transaction.Commit();
}
}
catch
{
transaction.Rollback();
throw;
}
}
}
Anche io ho buttato giù il codice al volo, possono esserci errori.
Vedi te poi come preferisci fare, l'importante è capirne il flusso