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

 

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

Dataset, DataTable, DataAdapter.....& παλιό, καλό....RDO

Îåêßíçóå áðü ôï ìÝëïò m6s. Τελευταία δημοσίευση από το μέλος m6s στις 08-06-2007, 00:43. Υπάρχουν 2 απαντήσεις.
Ταξινόμηση Δημοσιεύσεων: Προηγούμενο Επόμενο
  •  02-06-2007, 01:25 32484

    Dataset, DataTable, DataAdapter.....& παλιό, καλό....RDO

    Καλησπέρα σας,
    Ειμαι πολύ καινούριος σίγουρα στο χώρο αυτό, αλλα και στο .ΝΕΤ γενικότερα.
    Γνωρίζα VB6 και έχω δουλεψει με αυτη με βαση το εργαλειο RDO εκεινη την εποχη, που λιγο μετα αντικατασταθηκε απτο ADO, και τωρα το ADO.NET. Το προβλημα λοιπον, ειναι οτι διαβαζωντας τα σχετικα απτο MSDN κλπ πηγες εκανα καποια απλα query. Σημειωνω οτι σχετικα, πεδευτικα, να βρω ενα τρόπο να ξεκολλησω απτα "ετσιματζηδικα" εργαλεια της MS, διοτι δεν καταλαβαινω τα εξής :

    Με δικο μου κώδικα δεν σας πεδευω, την φιλοσοφια του ADO θα ηθελα να καταλαβω.... :-)

    1) Αν χρησιμοποιουμε, τα visual εργαλεια για dataset, dataadapters, binders κλπ....Αν θελω να τρεξω χιλιάδες ερωτηματα στη βαση πρεπει να χω και χιλιαδες απο αυτα τα εργαλειάκια ;Οκ, καταλαβαινω οτι ενα adapter εχει ΕΝΑ SELECT, ENA UPDATE, ENA DELETE query, που γραφικά το φτιάχνω, γίνεται να χω περισσότερα σε ενα dataadapter ? ( Εχω μια φορμα για ASP, και πανω της εχω δημιουργησει 2 DataAdapters για να παρω JOIN 2 πινακες τα αποτελσματα.....και που παλι δεν νομιζω οι το πετυχα...

    2) Αν θελω να κανω απανωτα SELECT, αντικαθιστώ το αρχικό, ή να φτιάξω τόσα οσα θελω SELECT

    3) Αν εχω dataset και εχω 2 πινακες με JOIN, πως θα κάνω update?

    4) Ενα προβλημα που αντιμετωπιζω απο παλια, ειναι οτι θελω να κανω ενα SELECT, μετα ενα δευτερο SELECT που αν βγουν καποια αποτελεσματα, πανω στο αρχικο κανω ενα INSERT η UPDATE τα δεδομενα του δευτερου SQL ερωτηματος. Και ρωτώ τώρα.....
        Χρειαζομαι, ενα SQLConnection, ok? Χρειαζομαι και το DataAdapter...
        α) Σηκώνω μια φορα το connection και το κλείνω μετα το τελευταίο INSERT? η καθε φορα την κλείνω και ανοιγω....;
        β) Ποσα DataAdapter φορτώνω ;
        γ) DataTable ή DataSet ?

    Αν υπάρξει ανταπόκριση μετα εχω και κατι αποριουλες με το DataGrid της Infragistics :-)

    Σας ευχαριστώ πολύ εκ των προτερων

  •  02-06-2007, 02:09 32487 σε απάντηση της 32484

    Απ: Dataset, DataTable, DataAdapter.....& παλιό, καλό....RDO

    Για να καταλάβεις τί γίνεται με το ADO.NET θα πρέπει πρώτα να ξεχάσεις το πως δούλευε το Recordset ή τα DataSet της Delphi. Αν ξεκίνησες με τα εργαλεία χωρίς να κοιτάξεις το documentation θα είναι επίσης δύσκολο να καταλάβεις τί συμβαίνει. Στο λέω εκ πείρας, γιατί έχω χάσει αρκετό χρόνο προσπαθώντας να καταλάβω στα γρήγορα πως δουλεύει ένα πράγμα προσπαθώντας να βρω docs που να επιβεβαιώνουν το πως νομίζω εγώ ότι δουλεύει. Και μάντεψε ... πολλές φορές δεν δουλεύει όπως νόμιζα. Μόλις ξεκολλήσω, διαπιστώνω ότι τα docs τα περιέγραφαν πολύ καλά.

    Το ADO.NET έχει το Command object για την εκτέλεση queries, όπως και το ADO. Όπως και στο ADO μπορείς να ορίσεις παραμέτρους για τα queries. Το query εκτελείται με μία από τις εντολές ExecuteXXX, μία από τις οποίες σου επιστρέφει ένα DataReader. Ο DataReader είναι κάτι σαν fast forward recordset και σου επιτρέπει να διαβάσεις δεδομένα γρήγορα.
        Συνήθως όμως τα αποτελέσματα των queries τα θέλουμε σε μορφή πίνακα. Εδώ μπαίνουν τα DataTables και τα DataSets. Τα DataSets είναι σαν μία περιορισμένη μορφή βάσης στη μνήμη: Περιέχει πολλαπλούς πίνακες, έχει relations, κάποια μορφή indexing και επιπλέον "θυμάται" τις αλλαγές που κάνεις σε αυτό. Δουλεύει εντελώς ανεξάρτητα από τη βάση, όπως παλιά το disconnected recordset. Καλύτερα δες το ως ένα snapshot των δεδομένων, το οποίο μπορείς να το τροποποιήσεις και μετά να το αποθηκεύσεις στη βάση.
      Ο DataAdapter τώρα, αναλαμβάνει να διαβάσει και να αποθηκεύσει τις μεταβολές που γίνονται σε ένα DataTable στη βάση. Όταν του ζητάς να φορτώσει ένα πίνακα, εκτελεί την εντολή που του έχεις δώσει για select, παίρνει το DataReader που επιστρέφεται και βάζει μία-μία τις γραμμές στο κατάλληλο DataTable. Όταν έχεις αλλαγές και του λες να τις αποθηκεύσει, ψάχνει τις γραμμές για να δει ποιές έχουν αλλάξει και εκτελεί για την καθεμία το αντίστοιχο Insert, Update ή Delete.

    Αυτές οι κλάσεις χρησιμοποιούνται είτε χρησιμοποιήσεις τα visual εργαλεία, είτε όχι. Αυτό που κάνουν τα visual εργαλεία είναι ότι δημιουργούν νέες κλάσεις DataSet και DataTable (αυτό λέγεται typed datasets) με τη δομή που δίνεις εσύ. Είναι σαν να δημιουργείς ένα Recordset με προκαθορισμένες στήλες. Ταυτόχρονα, τα εργαλεία δημιουργούν και τα κατάλληλα queries και DataAdapters για κάθε πίνακα που σχεδιάζεις. Αυτό μπορεί να σου γλυτώσει πολύ χρόνο αν έχεις σχετικά λίγους πίνακες και το σχήμα των δεδομένων σου είναι σταθερό.

    Δεν είσαι υποχρεωμένος να χρησιμοποιήσεις τα visual εργαλεία. Μπορείς να χρησιμοποιήσεις απευθείας τις κλάσεις του ADO.NET για να διαβάσεις δεδομένα από τη βάση.

    Τώρα, στα DataSets δεν υπάρχουν Joins αλλά Relations, κάτι αντίστοιχο με τα Foreign Keys. O DataSet designer σχεδιάζει snapshot, όχι queries. Συνεπώς, για να αποθηκεύσεις τις αλλαγές δύο πινάκων που έχουν relation μεταξύ τους, χρησιμοποιείς τον DataAdapter του καθενός για να αποθηκεύσεις τις αλλαγές. Εδώ χρειάζεται προσοχή γιατί δεν μπορείς να αποθηκεύσεις χύμα όλες τις αλλαγές: Πρώτα πρέπει να διαγράψεις τις child εγγραφές, μετά τις Parent κλπ, όπως θα έκανες και με μία βάση. Ο DataAdapter δέχεται παραμέτρους για να αποθηκεύσει μόνο τις Inserted, Updated, Deleted τιμές κάθε φορά, οπότε με λίγη προσοχή μπορείς να αποθηκεύσεις όλες τις αλλαγές.

    Όσον αφορά το 4ο ερώτημα, μου φαίνεται ότι αυτό που ζητάς δεν είναι να κάνεις queries αλλά να γράψεις μία INSERT ... SELECT ... WHERE ... Με ένα statement κάνεις τη δουλειά χωρίς να πηγαινοφέρνεις δεδομένα στην εφαρμογή.

    Τέλος, τα DataSets και τα DataGrids δεν έχουν άμεση σχέση μεταξύ τους. Τα Grids μπορούν να παρουσιάζουν πληροφορίες από διάφορες πηγές, μία μόνο από τις οποίες είναι τα DataSets. Τα Grids μπορούν να παρουσιάσουν ακόμα και αντικείμενα, και γενικά οτιδήποτε μπορεί να περιέχεται σε ένα IList.

    Ξανακοίτα το Documentation, ειδικά τα Walkthroughs και τα Quickstarts. Είναι πολύ κατατοπιστικά, φτάνει να μην προσπαθείς να τα ταιριάξεις με όσα ήξερες από παλιά. Το ADO.NET είναι πολύ διαφορετικό από το ADO, πόσο μάλλον το RDO.

     


    Παναγιώτης Καναβός, Freelancer
    Twitter: http://www.twitter.com/pkanavos
  •  08-06-2007, 00:43 32738 σε απάντηση της 32487

    Απ: Dataset, DataTable, DataAdapter.....& παλιό, καλό....RDO

    Καλησπέρα,

    Καταρχήν να πω οτι για καποιον ανεξηγητο λογο απο windows XP ειτε με explorer ειτε με firefox, σε αυτο το χώρο δεν μπορώ να μπώ, τραβανε κολληματα, οσο και αν δεν θελετε να το πιστευετε, γραφω μεσα απο λινουξ+φαιρφοξ...Cool.Μηπως υπάρχει καποιο προβλημα στο site?

    Δευτερον, σε ευχαριστώ για την αμεση απαντηση, και σόρυ που δεν απαντησα εγω με την σειρα μου γρηγοροτερα, αλλα που να φανταστώ....Embarrassed

    Anyway, αυτο που περισσοτερο θελω να καταλαβω, ειναι οτι αν θες να κανεις 2 SELECT ταυτοχρονα στην βαση, κατι το οποιο δεν εχω δει σε tutorial, σημαίνει οτι θα πρεπει να εχω ΔΥΟ dataadapters? και ενα connection? Το ρωτάω πως ειναι η σωστή αντιμετώπιση για το κόστος στους πόρους.

    Επίσης, αν εχεις το datatable, ποσα INSERT ή SELECT "κρεμονται", γιατι πολύ ωραία τα tutorials, Coolαλλα παντα για ενα SELECT και για ενα UPDATE μιλάνε.
    Δεν εχω καταλάβει, αντικαθιστάς τις εντολές ( και εδώ μηλάω για το γραφικό ουσιαστικά κομμάτι, που σχεδιάζεις στο xsd. ) Σε κώδικα, ενοείται θα μπορούσα να το αντικαταστήσω...αλλα ειναι σωστό και αυτό...

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