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

 

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

Δυο ερωτήματα μαζί

Îåêßíçóå áðü ôï ìÝëïò Ioannis P. Τελευταία δημοσίευση από το μέλος Ioannis P στις 25-04-2006, 11:02. Υπάρχουν 3 απαντήσεις.
Ταξινόμηση Δημοσιεύσεων: Προηγούμενο Επόμενο
  •  21-04-2006, 12:57 12055

    Δυο ερωτήματα μαζί

    Έχω φτιάξει κάποια μικρή εφαρμογή σε VB.net 2005 και Oracle 9,2 και σε κάποιο σημείο ενημερώνω δυο πίνακες διαδοχικά. Αυτό που θέλω να μάθω είναι, πως θα διασφαλίσω οτι θα ενημερωθούν και οι δύο πίνακες ή κανένας σε περίπτωση σφάλματος (πχ δικτύου). Θυμάμαι οτι κάποιος μου είχε πει κάποτε οτι στον SQL αν δυο ερωτήματα είναι μέσα σε double quotes θα εκτελεστούν σαν ένα. Οπότε ή θα εκτελεστούν και τα δυο ή κανένα. Κάτι ανάλογο σε Oracle;
  •  24-04-2006, 19:16 12071 σε απάντηση της 12055

    Απ: Δυο ερωτήματα μαζί

    Θα πρέπει να ξεκινήσεις ένα transaction και θα δηλώσεις τα ερωτήματα σου σάν μέρος του transaction οπότε άν υπάρξει περίπτωση λάθους τότε στο block try catch

    μπορείς να κάνεις rollback το transaction.

    π.χ.

    private function blabla() as boolean

    dim trn as OleDb.OleDbTransaction

    try

    trn = Me.Connection.BeginTransaction()

    oledbCommand1.Transaction=trn

    oledbCommand2.Transaction=trn

    oledbCommand1..ExecuteNonQuery()

    oledbCommand2..ExecuteNonQuery()

    trn.Commit()

    return true

    catch ex as exception

    trn.Rollback()

    return false

    end try

    end function
    Ιωάννης Μανουσάκης
  •  25-04-2006, 10:24 12076 σε απάντηση της 12055

    Απ: Δυο ερωτήματα μαζί

    Αν θέλεις να εκτελέσεις και τις δύο τροποποιήσεις στα πλαίσια ενός transaction χρησιμοποιώντας SQL statements θα πρέπει να φτιάξεις ένα string με τις εντολές και στην αρχή του να βάλεις "BEGIN TRANSACTION;" και στο τέλος "COMMIT;". Π.χ.

    "BEGIN TRANSACTION;

    UPDATE TABLE1
    SET Field1='XXX'
    WHERE ID=1;

    UPDATE TABLE2
    SET Field2='XXX'
    WHERE ID=2;

    COMMIT;"

    Νομίζω ότι στην Oracle θα πρέπει να τροποποιήσεις τα default, καθώς θεωρεί ότι οποιαδήποτε εντολή μετά από ένα commit ξεκινάει νέο transaction. Θα πρέπει να το δοκιμάσεις όμως, γιατί έχω καιρό να χρησιμοποιήσω Oracle.

    Αυτό που λες για τα double quotes δεν ισχύει ούτε στον SQL Server. Και στον SQL Server, για να εκτελέσεις πολλαπλά updates σε ένα transaction θα πρέπει να χρησιμοποιήσεις τα BEGIN TRANSACTION ... COMMIT.


    Παναγιώτης Καναβός, Freelancer
    Twitter: http://www.twitter.com/pkanavos
  •  25-04-2006, 11:02 12077 σε απάντηση της 12055

    Απ: Δυο ερωτήματα μαζί

    Σας ευχαριστώ και τους δυο.

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