Καλώς ορίσατε στο dotNETZone.gr - Σύνδεση | Εγγραφή | Βοήθεια
σε

 

Αρχική σελίδα Ιστολόγια Συζητήσεις Εκθέσεις Φωτογραφιών Αρχειοθήκες

Αλλη μία ερώτηση για concurrency violation

Îåêßíçóå áðü ôï ìÝëïò Ηλίας Κεκάκος. Τελευταία δημοσίευση από το μέλος Dimitris Papadimitriou στις 04-07-2007, 10:24. Υπάρχουν 1 απαντήσεις.
Ταξινόμηση Δημοσιεύσεων: Προηγούμενο Επόμενο
  •  04-07-2007, 08:21 33366

    Αλλη μία ερώτηση για concurrency violation

      Ισως είναι κουραστικό αλλά έχω ένα προβληματάκι με concurrency violation. Έχω ένα dataset και αφού ο χρήστης κάνει μία αλλαγή σε μία συγκεκριμένη εγγραφή την καταχωρή στην ΒΔ μέσω της DATAADAPTER.UPDATE(DATASET) και με την χρήση ενός COMMANDBUILDER. Μετά το update χρησιμοποιώ την DATASET.ACCEPTCHANGES. Αν ξανακάνω αλλαγή στην ίδια εγγραφή έχω concurrency violation. Ενημέρωση στην ΒΔ από αλλού δεν υπάρχει. Τι πρέπει να κάνω; Να ξαναφορτώσω το Dataset μετά το update; Υπάρχει άλλος τρόπος;
  •  04-07-2007, 10:24 33368 σε απάντηση της 33366

    Απ: Αλλη μία ερώτηση για concurrency violation

    Καταρχήν δε χρειάζεται να καλέσεις την AcceptChanges μετά το DataAdapter.Update, γιατί καλείται αυτόματα από το τελευταίο. Αυτή η συμπεριφορά ελέγχεται από το property AcceptChangesDuringUpdate του DataAdapter. By default έχει τιμή true. Απλά σαν παρατήρηση, μια που δεν προκαλεί αυτό το πρόβλημα.

    Σε περίπτωση που δεν είναι γνωστό, Concurrency violation σημαίνει ότι τα δεδομένα που πας να αποθηκεύσεις έχουν αλλαχτεί και από κάποιο άλλο process από τη στιγμή που εσύ τα πήρες ή τα έστειλες τελευταία φορά για update. Αυτό το process μπορεί να είναι άλλος φυσικός χρήστης που χρησιμοποιεί την βάση σου ή κάποιο άλλο thread της εφαρμογής σου που το βάζεις να κάνει κάτι (την έχω πατήσει έτσι και έψαχνα ώρα να βρω τι γίνεται! Embarrassed).

    Μήπως υπάρχει κάτι που τρέχει και κάνει αλλαγές στα δεδομένα σου μετά το update; Αν θέλεις άνοιξε τον SQL Server Profiler να δεις τι τρέχει μετά το update.

    Σε αυτή τη σελίδα μπορείς να διαβάσεις για το πως μπορείς να λύσεις το πρόβλημα. Συγκεκριμένα πρέπει να χρησιμοποιήσεις το OnRowUpdated event. Σαν εναλλακτική, σου προτείνω το εξής, που είχε λύσει το πρόβλημα στη δική μου περίπτωση. Επειδή εγώ είχα όντως κάποιο thread που έκανε αλλαγές στα δεδομένα μου και επειδή το συγκεκριμένο thread πείραζε μόνο columns που δεν πείραζε ποτέ ο χρήστης (ήταν readonly γι αυτόν), απλά εξαίρεσα αυτές τις στήλες από το update, χωρίς να χρησιμοποιήσω το OnRowUpdated event.


    Dimitris Papadimitriou
    Software Development Professional
    dotNETZone.gr News

    Οι απαντήσεις παρέχονται για συγκεκριμένες ερωτήσεις και χωρίς καμιά εγγύηση. Διαβάστε επίσης τους όρους χρήσης.
Προβολή Τροφοδοσίας RSS με μορφή XML
Με χρήση του Community Server (Commercial Edition), από την Telligent Systems