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

 

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

Πως μπορώ να κλειδώνω έναν πίνακα για insert

Îåêßíçóå áðü ôï ìÝëïò amargar. Τελευταία δημοσίευση από το μέλος KelMan στις 23-03-2006, 21:35. Υπάρχουν 17 απαντήσεις.
Σελίδα 1 από 2 (18 εγγραφές)   1 2 >
Ταξινόμηση Δημοσιεύσεων: Προηγούμενο Επόμενο
  •  23-03-2006, 19:27 11026

    Πως μπορώ να κλειδώνω έναν πίνακα για insert

    Προσπαθώ να κλειδώσω έναν πίνακα από το select όταν εκείνη την στιγμή κάνω insert ,update ή delete. Έχω δοκιμάσει με το Transaction αλλά δεν θέλω να κάνω rollback αλλά να έχει προτεραιότητα το insert , delete και update από το select. Αυτό γίνεται για το λόγο ότι την συγκεκριμένη Βάση την χρησιμοποιούν ταυτόχρονα περισσότερα από ένα Application τατόχρονα.

    Γνωρίζει κανείς τι μπορώ να χρησιμοποιήσω

     

  •  23-03-2006, 19:37 11027 σε απάντηση της 11026

    Απ: Πως μπορώ να κλειδώνω έναν πίνακα για insert

    Με ένα transaction μπορείς να κλειδώσεις κάποιες εγγραφές ώστε στη συνέχεια να κάνεις insert, update και delete. Για τη διάρκεια του transaction θα είναι κλειδωμένες οι εγγραφές άσχετα αν μετά θα κάνεις commit ή rollback.

    Θα πρέπει όμως να είναι πιο σαφές αυτό που προσπαθείς να κάνεις και αν είναι δυνατόν να μας δείξεις και κάποιο κομμάτι κώδικα. Τι database χρησιμοποιείς; Δουλεύεις με DataCommands που τα κάνεις execute ή με DataSets που τα κάνεις Update;


    Vir prudens non contra ventum mingit
  •  23-03-2006, 19:43 11028 σε απάντηση της 11026

    Απ: Πως μπορώ να κλειδώνω έναν πίνακα για insert

    Δουλεύω με dataCommands.

    Γενικά η DataBase είναι Mysql που βρίσκεται σε έναν Server και υπάρχουν Application που επικοινωνούν μαζί της. Βασικά ένα μόνο Application έχει ένα thread που κάθε 3 δευτερόλεπτα κάνει select και υπάρχουν και ξεχωριστά Application σε άλλα Workstation που κάνουν τα insert , delete και update.

    η προτεραιότητα δίνεται στα insert , delete και update και εάν μετά έρχεται το Select. Απλά δε θέλω να δέχεται το τελευταίο dirty reads.
  •  23-03-2006, 19:47 11029 σε απάντηση της 11028

    Απ: Πως μπορώ να κλειδώνω έναν πίνακα για insert

    Ξέχασα να πω ότι το select δε γίνεται με DataSet αλλά με DataReader. Κοίταξα το System.Data.IsolationLevel που διαθέτει κάποια επίπεδα αλλά δεν γνωρίζω εάν βοηθήσουν.
  •  23-03-2006, 19:53 11030 σε απάντηση της 11026

    Απ: Πως μπορώ να κλειδώνω έναν πίνακα για insert

    Τι provider χρησιμοποιείς; Και τι version ADO.NET 1.x ή ADO.NET 2.0;
    Vir prudens non contra ventum mingit
  •  23-03-2006, 19:55 11031 σε απάντηση της 11029

    Απ: Πως μπορώ να κλειδώνω έναν πίνακα για insert

    ADO.NET 1.1 για .NET 2003 και C#
  •  23-03-2006, 19:56 11032 σε απάντηση της 11030

    Απ: Πως μπορώ να κλειδώνω έναν πίνακα για insert

    Πες και τον Provider... Smile [:)]
    Vir prudens non contra ventum mingit
  •  23-03-2006, 19:57 11033 σε απάντηση της 11031

    Απ: Πως μπορώ να κλειδώνω έναν πίνακα για insert

    MySQLDriverCS
  •  23-03-2006, 20:26 11035 σε απάντηση της 11033

    Απ: Πως μπορώ να κλειδώνω έναν πίνακα για insert

    Απ'ότι είδα, ο provider αυτός υποστηρίζει τα isolation levels, οπότε κάνεις BeginTransaction στο connection object και ορίζεις το Isolation Level πάνω στο Transaction object που σου επιστρέφει το BeginTransaction. Κατόπιν, ορίζεις και κάνεις execute κανονικά τα commands και στο τέλος κάνεις commit, δηλαδή κάτι σαν το παρακάτω:

    try {
        conn.open;
        try {
            trans = conn.BeginTransaction();
            trans.IsolationLevel = ... // READ-COMMITTED ή REPEATABLE-READ 
            cmd.Connection = conn;
            cmd.CommandText = strSQLStatement;
            cmd.Transaction = trans;
            cmd.ExecuteNonQuery();
            conn.Commit();
            conn.Close();
        }
        catch (Exception ex) {
            trans.Rollback();
        }
        catch (Exception ex) {
            // Handle the exception
        }
    }


    Vir prudens non contra ventum mingit
  •  23-03-2006, 20:33 11036 σε απάντηση της 11029

    Απ: Πως μπορώ να κλειδώνω έναν πίνακα για insert

    Αυτό θα το χρησιμοποιήσω για τα queries για insert; Γιατί έχω την εντύπωση ότι δουλεύουν μόνο για το select επειδή το IsolationLevel αναφέρετε μονο για το Select
  •  23-03-2006, 20:36 11037 σε απάντηση της 11036

    Απ: Πως μπορώ να κλειδώνω έναν πίνακα για insert

    Και κάτι ακόμα έστώ ότι το χρησιμοποιήσω για το Insert. Εάν την συγκεκριμένη στιγμή εκτελεσθεί και ένα select δε θα πέσω πάνω στο exception και θα γίνει το Rollback οπότε θα χαθεί η νέα εγγραφή. Αυτό προσπαθώ να αποφύγω.
  •  23-03-2006, 20:40 11038 σε απάντηση της 11037

    Απ: Πως μπορώ να κλειδώνω έναν πίνακα για insert

    Το isolation level αναφέρεται σε όλα τα commands που τα τρέχεις με το connection που σχετίζεται με το transaction. Όταν έχεις ανοιχτό το transaction, τα Select που συμβαίνουν έξω από αυτό δεν το κάνουν να σηκώσει exception. Μπορεί αυτά τα select να γίνουν blocked αλλά τίποτα παραπάνω. Ιδιαίτερα όταν κάνεις insert δεν μπορεί να υπάρξει τέτοιο πρόβλημα γιατί θα εισάγεις μια νέα εγγραφή που δεν υπάρχει.


    Vir prudens non contra ventum mingit
  •  23-03-2006, 20:48 11039 σε απάντηση της 11037

    Απ: Πως μπορώ να κλειδώνω έναν πίνακα για insert

    Και κάτι τελευταίο για να σε ευχαριστήσω. Ποιο level προτείνεις για το trans.IsolationLevel = ... // READ-COMMITTED ή REPEATABLE-READ



    Ευχαριστώ πολύ KelMan
  •  23-03-2006, 20:52 11040 σε απάντηση της 11039

    Απ: Πως μπορώ να κλειδώνω έναν πίνακα για insert

    Καλύτερα να ρίξεις μια ματιά εδώ http://dev.mysql.com/doc/refman/5.0/en/innodb-transaction-isolation.html που τα εξηγεί και δες πιο είναι καταλληλότερο για την περίπτωσή σου...


    Vir prudens non contra ventum mingit
  •  23-03-2006, 20:54 11041 σε απάντηση της 11039

    Απ: Πως μπορώ να κλειδώνω έναν πίνακα για insert

    Ευχαριστώ
Σελίδα 1 από 2 (18 εγγραφές)   1 2 >
Προβολή Τροφοδοσίας RSS με μορφή XML
Με χρήση του Community Server (Commercial Edition), από την Telligent Systems