Τα transactions δεν είναι και τόσο καλή ιδέα... Αν αυτός που πάει στη κουζίνα μετά ξεχάσει να γυρίσει, τι θα γίνει; Θα μείνει η εγγραφή κλειδωμένη; Εξάλλου, τα μεγάλα transactions μειώνουν το scalability της εφαρμογής διότι αυξάνονται τα κλειδώματα.
Ουσιαστικά αυτό που περιγράφεις είναι ένα από τα conflict resolution σενάρια (update μιας εγγραφής που κάποιος άλλος έχει ήδη κάνει update, delete μιας εγγραφής που κάποιος άλλος έχει κάνει update, update μιας εγγραφής που κάποιος άλλος έχει κάνει delete). Γενικά τα conflicts προκύπτουν όταν τα data που βλέπεις και δουλεύεις είναι παροχημένα. Πες μας, μιλάς για εφαρμογή που παίζει με ADO.NET; Χρησιμοποιείς Dataset για να φέρνεις τα data στους clients και κατόπιν καλείς την Update method του Dataset;
Σε αυτήν την περίπτωση δεν χρειάζεται να καταφύγεις σε flags. Το Dataset για κάθε DataRow κρατάει την εικόνα του πως ήταν όταν το διάβασε (Για την ακρίβεια, κρατάει πολλές διαφορετικές εικόνες και μία από αυτές είναι το πως ήταν το record όταν έγινε populate το DataTable). Όταν θα καλέσεις την Update method, θα επιχειρήσει να κάνει update την εγγραφή αλλά δεν θα υπάρχει και θα σου επιστρέψει λάθος. Μπορείς να πιάσεις λοιπόν το λάθος και να κάνεις κάποια ενέργεια ανάλογα με τη λογική της εφαρμογής. Π.χ. να μετατρέψεις το update σε insert με νέες τιμές. Ή να ενημερώσεις αυτόν που πήγε να κάνει το update ότι πλέον η εγγραφή δεν υπάρχει.
[Edit] Για περισσότερες πληροφορίες ψάξε για conflict resolution και concurrency ή ξαναρώτα ό,τι χρειαστείς.
Επίσης, ξέχασα, ένα από τα απαραίτητα URLs για το concurrency http://support.microsoft.com/default.aspx?scid=%2Fservicedesks%2Fwebcasts%2Fen%2Ftranscripts%2Fwct050103.asp
Vir prudens non contra ventum mingit