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

 

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

Πώς αντιγράφω ένα υπάρχον datatable από ένα dataset σε ένα άλλο;

Îåêßíçóå áðü ôï ìÝëïò Panos Kousidis. Τελευταία δημοσίευση από το μέλος KelMan στις 06-09-2006, 17:58. Υπάρχουν 3 απαντήσεις.
Ταξινόμηση Δημοσιεύσεων: Προηγούμενο Επόμενο
  •  06-09-2006, 16:18 16369

    Πώς αντιγράφω ένα υπάρχον datatable από ένα dataset σε ένα άλλο;

    Λοιπόν, έχω 2 datasets που έχουν από 1 datatable σε ένα dll. Θέλω να χρησιμοποιήσω και τα 2 tables σε ένα crystal report, οπότε θα πρέπει να τα συγχωνεύσω σε ένα dataset. Φτιάχνω ένα typed dataset στο dll με τα reports μου με 2 datatables που έχουν ακριβώς τις ίδιες στήλες με αυτές των 2 πρώτων.

    Πρέπει τώρα με κάποιο τρόπο να αντιγράψω τα δεδομένα του Dataset1.Datatable1 στο PrintDataset.Datatable1 και του Dataset2.Datatable1 στο PrintDataset.Datatable2. Ποιος είναι ο καλύτερος τρόπος να γίνει κάτι τέτοιο; Δοκίμασα μερικούς τρόπους οι οποίοι είχαν σαν αποτέλεσμα this row already belongs to a table και datatable is readonly...

    Μία βοήθεια;; Ευχαριστώ

    Υ.Γ Προγραμματίζω σε VB.NET


    Panos
  •  06-09-2006, 16:32 16370 σε απάντηση της 16369

    Απ: Πώς αντιγράφω ένα υπάρχον datatable από ένα dataset σε ένα άλλο;

    Εφόσων οι πίνακες έχουν ακριβώς τα ίδια πεδία τότε μπορείς να χρησιμοποιήσεις την Merge. Κάνει ακριβώς αυτό που θες. Μπορείς να διαβάσεις περισσότερα στο MSDN.
  •  06-09-2006, 16:41 16371 σε απάντηση της 16369

    Απ: Πώς αντιγράφω ένα υπάρχον datatable από ένα dataset σε ένα άλλο;

    Thanx για τη γρήγορη και σωστή απάντηση. Δούλεψε :)

    Δε μου πέρασε από το μυαλό η merge, δοκίμασα την copy αλλά είχα προβλήματα
    Panos
  •  06-09-2006, 17:58 16375 σε απάντηση της 16371

    Απ: Πώς αντιγράφω ένα υπάρχον datatable από ένα dataset σε ένα άλλο;

    Αν παίζεις σε .NET 2.0, στο ADO.NET 2.0 το DataTable object έχει άλλη μια μέθοδο διαθέσιμη γι αυτή τη δουλειά. Πρόκειται για τη Load η οποία παίρνει δύο παραμέτρους, η πρώτη είναι ένα DataReader object και η δεύτερη ένα enumeration. H διαφορά της σε σχέση με τη Fill είναι ότι αν χρησιμοποιήσεις τη Fill, τότε μόλις "μπουν" τα data στο target DataTable, θεωρείται ότι είναι τα αρχικά data και δεν μπορείς να τα στείλεις πίσω στη βάση (με Update ενός TableAdapter). Με τη Load μπορείς να τα "μαρκάρεις" ως νέα ώστε κατόπιν να κάνεις ακριβώς αυτό!



    Dim dr As IDataReader = DataSet1.DataTable1.CreateDataReader
    PrintDataset.DataTable1.Load(dr, LoadOption.Upsert)

    Στο snippet φαίνεται άλλη μια νέα μέθοδος του DataTable, η CreateDataReader η οποία σου επιστρέφει έναν DataReader από ένα ήδη γεμάτο DataTable.
    Τέλος, υπάρχει επίσης και η LoadDataRow μέσω της οποίας μπορείς να κάνεις περίπου την ίδια δουλειά, αλλά με ένα loop διαβάζεις μία-μία τις εγγραφές του DataReader και βάσει κάποιας λογικής την κάνεις Load ή όχι στο target DataTable.


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