Καλησπέρα ^^
Έστω ότι έχουμε, σε ένα απομακρυσμένο υπολογιστή, ένα SQL Server (τουλάχιστον 2008, αλλά μπορεί μέχρι και 2019) και υπάρχει ένα .Net WinForms πρόγραμμα το οποίο διαβάζει το SQL Table "tab1" που έχει μέσα 2 εγγραφές "line1" και "line2", με 5 columns.
Αν ανοίξει το πρόγραμμα ο πρώτος άνθρωπος και κάνει populate κάποιου είδους DataGridView, και εκείνη τη στιγμή ανοίξει το πρόγραμμα και κάνει το ίδιο και ο δεύτερος άνθρωπος,
στο μεταξύ κάνει μια αλλαγή ο πρώτος άνθρωπος, ποιος είναι ένας καλός τρόπος να χειριστούμε την περίπτωση όσον αφορά στον δεύτερο;
Νομίζω το καλύτερο θα ήταν να ένα μήνυμα που να του λέει ότι έχει γίνει μια αλλαγή και να ρωτάει αν θέλει να "κατεβάσει τις αλλαγές". Πώς θα γίνει αυτό; Έχουμε ένα timer ανά 1000ms να κοιτάει τον SQL Server τι έχει και να συγκρίνει αν είναι ίδιο με το DataTable που έχουμε locally ως data source στο DataGridView?
Πώς κάνουμε handle κάτι τέτοιο; Κρατάμε σε μια μεταβλητή όλα τα κλουβιά και όλες τις αλλαγές που έχει κάνει ο δεύτερος σε αυτά, ανανεώνουμε το grid και μετά περνάμε τις αλλαγές του από πάνω;
Όταν πατήσει το κουμπί για save, αυτό το κάνω με " SQLAdapt.Update(dt)". Τώρα αν έχει γίνει μια αλλαγή πιο πριν, βγάζει ένα πρόβλημα τύπου το timestamp του sql table δεν είναι το ίδιο με αυτό που έχεις και δεν μπορεί να εκτελεστεί το Update(). Κάνοντας το πάνω, λογικά θα διορθωθεί κι αυτό και θα μπορεί να γίνει save.
Σε κάποιες περιπτώσεις χρειάζονται joins προτού πάρω το table, και εκεί δεν λειτουργεί ποτέ το Update γιατί τραβάω το τραπέζι με SQL Query με joins και τέτοια μέσα και δεν μπορεί να καταλάβει πώς ακριβώς να το κάνει. Σε αυτές τις περιπτώσεις τ σώζω τις αλλαγές. Σε αυτές τις περιπτώσεις συνήθως παίρνω μεμονωμένα values και τα βάζω σε textboxes κτλ, ανάλογα με το τι είναι η τιμή. Εδώ θέλει διαφορετική λογική για το τι θα γίνει εάν ο πρώτος άνθρωπος αλλάξει κάτι που βλέπει ο δεύτερος, ως προς το πώς θα ανανεώσουμε το τι βλέπει ο δεύτερος;
Γενικά με μπερδεύει το πώς να χειριστώ την περίπτωση του 2 άτομα να κάνουν αλλαγές στο ίδιο sql table ταυτόχρονα.
Εάν οι ερωτήσεις δεν είναι αρκετά καθαρές, θα μπορούσα να καθίσω να κάνω ένα απλό winforms app και ένα video που να δείχνω τι εννοώ.