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

 

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

Λάθος foreign keys των νέων child rows κατά την εισαγωγή από τον Dataset στην βάση

Îåêßíçóå áðü ôï ìÝëïò Azular. Τελευταία δημοσίευση από το μέλος KelMan στις 04-02-2007, 17:01. Υπάρχουν 1 απαντήσεις.
Ταξινόμηση Δημοσιεύσεων: Προηγούμενο Επόμενο
  •  04-02-2007, 16:01 24493

    Λάθος foreign keys των νέων child rows κατά την εισαγωγή από τον Dataset στην βάση

    Περιγραφή

    Η εφαρμογή μου φορτώνει και συσχετίζει σε ένα Dataset 2 πίνακες όπου συσχετίζονται μεταξύ τους με μιά σχέση parent-child (ένα προς πολλά)
    Κατά την διαδικασία εισαγωγής δεδομένων υπάρχει η δυνατότητα εισαγωγής νέων parent και για κάθε parent μπορούν να εισαχθούν νέες child εγγραφές.Στον Dataset, για τις νέες parent εγγραφές το primary key κάνει autonumber ξεκινώντας από το 0 και αυξάνεται κατά 1.Αντίστοιχα οι συσχετισμένες child εγγραφές στο πεδιο foreign key θα παρουν τις τιμές του primary key από τις parent εγγραφές αφού υπάρχει η αντίστοιχη σχέση.

    Πρόβλημα

    Κατά την διαδικασία ενημέρωσης από τον Dataset στην βάση όμως έχω το εξής πρόβλημα.
    Τα primary keys των parent εγγραφών αλλάζουν αρίθμηση στην DB ακολουθώντας την αυξουσα αρίθμηση του αντίστοιχου πεδίου της βάσης.Έτσι λοιπόν η πρώτη νέα εγγραφή στον dataset που είχε primary key =0 κατά την εισαγωγή της στην βαση μπορέι να γίνει π.χ.187.
    Όμως στις child εγγραφές (που εισάγονται στον αλλον πίνακα) η τιμή του πεδίου foreign key παραμένει η ίδια με τον Dataset δηλαδή 0 στο παράδειγμά μας με αποτέλεσμα είτε να είναι ορφανές αυτές οι εγγραφές είτε να αντιστοιχουν σε λάθος parent εγγραφές.Να αναφέρω επίσης ότι οι δυό πίνακες φορτώνονται από την βάση στο dataset με 2 διαφορετικούς Adapter και η ενημέρωση πίσω στην βάση γίνεται μέσω αυτών αφού έχουν δημιουργηθεί επίσης και δύο CommandBuilder objects για τον καθένα.
    Πως μπορώ να υπερβώ αυτό το πρόβλημα; Ευχαριστώ
  •  04-02-2007, 17:01 24494 σε απάντηση της 24493

    Απ: Λάθος foreign keys των νέων child rows κατά την εισαγωγή από τον Dataset στην βάση

    Κατ' αρχήν μην ξαναχρησιμοποιήσεις CommandBuilder (παρά μόνο αφού εξοικειωθείς αρκετά με το ADO.NET και καταλάβεις τι ακριβώς κάνει και τι ΔΕΝ κάνει)! Smile
    Το πρόβλημά σου οφείλεται ακριβώς στη χρήση του CommandBuilder. Όταν δημιουργείς τους TableAdapters μέσω του Wizard, τότε όταν δημιουργεί το κάθε Insert και Update command, στο CommandText property που έχουν, μετά από κάθε INSERT και UPDATE statement κολλάει και ένα SELECT statement που έχει σκοπό να κάνει refresh στα data καθώς πολλές φορές άλλα ξεκινάμε να γράψουμε σε έναν πίνακα και άλλα περιέχει στο τέλος (λόγω identities, defaults, triggers, κλπ). Αν το κάθε Insert command σου είχε αυτό το ζευγάρι INSERT/SELECT τότε θα έπαιρνες πίσω την τιμή του identity που πραγματικά μπήκε στη βάση και κατόπιν δεν θα χρειάζονταν να κάνεις τίποτα το ιδιαίτερο για να κάνεις insert τις detail εγγραφές. Θα περιείχαν ήδη το σωστό identity. Όμως το statement που φτιάχνει ο CommandBuilder ΔΕΝ περιέχει αυτό το SELECT μετά το INSERT ή το UPDATE γιατί δεν προορίζεται γι αυτή τη δουλειά καθώς είναι μια quick'n'dirty λύση. Φτιάξε τους TableAdapters με τον Wizard και διάβασε προσεχτικά τον παραγόμενο κώδικα για να καταλάβεις πως λειτουργεί.

    Επειδή έχουμε ξανακουβεντιάσει αυτό το πρόβλημα, θα σου πρότεινα, αφού δουλέψεις με τον Wizard, να δεις για περισσότερα στα παρακάτω:

    http://msdn2.microsoft.com/en-us/library/ms971502.aspx

    http://www.dotnetzone.gr/cs/forums/16421/ShowPost.aspx (και επειδή είναι μακρύ το thread, δες ειδικότερα:

    http://www.dotnetzone.gr/cs/forums/permalink/16421/16525/ShowThread.aspx#16525)

    http://www.dotnetzone.gr/cs/forums/3427/ShowPost.aspx

    http://www.dotnetzone.gr/cs/forums/8901/ShowPost.aspx

     

     

     


    Vir prudens non contra ventum mingit
Προβολή Τροφοδοσίας RSS με μορφή XML
Με χρήση του Community Server (Commercial Edition), από την Telligent Systems