Καταρχήν δε χρειάζεται να καλέσεις την AcceptChanges μετά το DataAdapter.Update, γιατί καλείται αυτόματα από το τελευταίο. Αυτή η συμπεριφορά ελέγχεται από το property AcceptChangesDuringUpdate του DataAdapter. By default έχει τιμή true. Απλά σαν παρατήρηση, μια που δεν προκαλεί αυτό το πρόβλημα.
Σε περίπτωση που δεν είναι γνωστό, Concurrency violation σημαίνει ότι τα δεδομένα που πας να αποθηκεύσεις έχουν αλλαχτεί και από κάποιο άλλο process από τη στιγμή που εσύ τα πήρες ή τα έστειλες τελευταία φορά για update. Αυτό το process μπορεί να είναι άλλος φυσικός χρήστης που χρησιμοποιεί την βάση σου ή κάποιο άλλο thread της εφαρμογής σου που το βάζεις να κάνει κάτι (την έχω πατήσει έτσι και έψαχνα ώρα να βρω τι γίνεται!
).
Μήπως υπάρχει κάτι που τρέχει και κάνει αλλαγές στα δεδομένα σου μετά το update; Αν θέλεις άνοιξε τον SQL Server Profiler να δεις τι τρέχει μετά το update.
Σε αυτή τη σελίδα μπορείς να διαβάσεις για το πως μπορείς να λύσεις το πρόβλημα. Συγκεκριμένα πρέπει να χρησιμοποιήσεις το OnRowUpdated event. Σαν εναλλακτική, σου προτείνω το εξής, που είχε λύσει το πρόβλημα στη δική μου περίπτωση. Επειδή εγώ είχα όντως κάποιο thread που έκανε αλλαγές στα δεδομένα μου και επειδή το συγκεκριμένο thread πείραζε μόνο columns που δεν πείραζε ποτέ ο χρήστης (ήταν readonly γι αυτόν), απλά εξαίρεσα αυτές τις στήλες από το update, χωρίς να χρησιμοποιήσω το OnRowUpdated event.
Οι απαντήσεις παρέχονται για συγκεκριμένες ερωτήσεις και χωρίς καμιά εγγύηση. Διαβάστε επίσης τους όρους χρήσης.