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

 

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

Γεμισμα DataSet με DataAdapter

Îåêßíçóå áðü ôï ìÝëïò kallileo. Τελευταία δημοσίευση από το μέλος kallileo στις 08-01-2008, 16:05. Υπάρχουν 13 απαντήσεις.
Ταξινόμηση Δημοσιεύσεων: Προηγούμενο Επόμενο
  •  07-01-2008, 16:13 38869

    Γεμισμα DataSet με DataAdapter

    Θελω να γεμισω μια dataset απο μια βαση στην οποια περιεχονται καμια 15αρια πινακες. Για εναν πινακα κανω το παρακατω:

    OleDbConnection conn = new OleDbConnection(@"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=c:\mde\database2.mdb;");
    OleDbDataAdapter da1 = new OleDbDataAdapter("SELECT *FROM db1_Table1", conn);

    DataSet ds = new DataSet("DatS1");
    da1.Fill(ds);

    Η ερωτηση μου ειναι αν θα πρεπει να φτιαξω 15 διαφορετικους DataAdapters για να γεμισω τo DataSet και να μπορω να επεξεργαζομαι τα DataTables μεσα σε αυτο ή μπορει να γινει με λιγοτερο typing?

  •  07-01-2008, 17:37 38880 σε απάντηση της 38869

    Απ: Γεμισμα DataSet με DataAdapter

    Καλησπέρα Kallileo,

    αν και θεωρώ μάλλον λάθος να διαβάσεις 15 tables με την μία, κάποιο λόγο θα έχεις για να το θες,

    Το SQL string που βάζεις στο initialization στον OleDbDataAdapter να είναι

     string SQL = "SELECT *FROM db1_Table1 "+
    "SELECT *FROM db2_Table2 "+
    "SELECT *FROM db3_Table3 "+
    "SELECT *FROM db4_Table4 "+
    .....;
    OleDbDataAdapter da1 = new OleDbDataAdapter (SQL,conn);

    Αλλα Θα έχεις πρόβλημα με το ConnectionTimeout αν τα Data είναι πολλά.

    Ελπίζω να βοήθησα

    Νάσος


    "Success is the ability to go from one failure to another with no loss of enthusiasm."
    Winston Churchill

    "Quality means doing it right when no one is looking."
    Henry Ford

  •  07-01-2008, 18:04 38882 σε απάντηση της 38880

    Απ: Γεμισμα DataSet με DataAdapter



    Δεν εχω καποιο συγκεκριμενο λογο....Θα μπορουσα να το κανω και ενα ενα. Με ενδιαφερει η λογικη και σωστη προγραμματιστικα λυση.
    Απλα θελω να διαβασω τους πινακες και να τους κανω Merge με πίνακες απο αλλο mdb αρχειο εχει ομως ιδια δομη.

    Αν βαλω το string που λες μεσα στη DataSet θα παρω 15 πινακες με ονοματα Table1, Table2,..., Table15?

    Ευχαριστω για την απαντηση...
  •  07-01-2008, 19:21 38885 σε απάντηση της 38882

    Απ: Γεμισμα DataSet με DataAdapter

    Δεν υπάρχει γενικά και αόριστα "σωστή προγραμματιστικά λύση". Όλες οι λύσεις εξαρτώνται από τους παράγοντες που συνθέτουν το (προγραμματιστικό) πρόβλημα σου και τα resources που διαθέτεις για να το λύσεις. Θα πρέπει να είσαι λίγο πιο συγκεκριμένος στο τι προσπαθείς να κάνεις...


    Vir prudens non contra ventum mingit
  •  08-01-2008, 09:24 38897 σε απάντηση της 38885

    Απ: Γεμισμα DataSet με DataAdapter

    Εχω δυο αρχεια mdb με ακριβως την ιδια δομη των πινακων. Περιπου 15 πινακες το καθενα.
    Θελω να μπορω να κανω απλο INSERT τα δεδομενα τον πινακων που δεν εχουν κλειδι απο το ενα αρχειο στον αντιστοιχο πινακα του αλλου αρχειου και οσοι πινακες εχουν κλειδι να γινεται τσεκ του κλειδιου και αν δεν προυπαρχει να εισαγεται η εγγραφη.

    Για κανω αυτο θα πρεπει πρωτα να βαλω ολους τους πινακες σε ενα DataSet και απο κει και περα να κανω την επεξεργασια αυτων ισως με DataSet.Merge ή κατι παρομοιο.
    Τουλαχιστο ετσι το φανταζομαι...
  •  08-01-2008, 09:42 38900 σε απάντηση της 38897

    Απ: Γεμισμα DataSet με DataAdapter

    Αυτό είναι κάτι που θα γίνεται τακτικά στο πλαίσιο κάποιας εφαρμογής ή είναι μια διαδικάσια που θα την κάνεις one-off? Επίσης, οι πίνακες χωρίς κλειδιά είναι άδειοι στη δεύτερη βάση και απλά θες να ρίξεις όλες τις εγγραφές γι αυτούς τους πίνακες από την πρώτη στη δεύτερη;


    Vir prudens non contra ventum mingit
  •  08-01-2008, 10:12 38902 σε απάντηση της 38897

    Απ: Γεμισμα DataSet με DataAdapter

    Όσο το προγραμμά σου θα εκτελεί την διαδικασία, στα mdb χρήστες θα συνεχιζουν να καταχωρούν??

       Αν ναι, από την ώρα που θα διαβάσεις τα δεδομένα μέχρι την ώρα που θα κάνεις INSERT τα Data στους πίνακες θα εχουν αλλάξει.

    Τώρα στην περίπτωση που οι χρήστες δεν ειναι στις db(s) τότε έγω θα το έκανα σε ένα Class (MergeTableClass) πού διαχειριζετε ένα πίνακα(για κάθε db) με events για να βλέπεις πρόοδο στην φόρμα και ένα class (MergeEngineClass) που θα εκτελεί 15  MergeTableClass.

    Τώρα εγώ δεν θα έκανα merge από DataSet, αλλά Select από το ένα πίνακα, για κάθε εγγραφή στον άλλον πίνακα.

    foreach (DataRow dr1 in dsFirst.Tables[0].Rows)
    {
       DataRow [] result = dsSecond.Tables[0].Select("TableID="+dr1["TableID"].ToString());

       if (result == null || result.Length == 0)
          //Δεν υπάρχει εγγραφή
       else if (result.Length == 1)
          //Εδώ ίσως να πρέπει να ελέγχεις αν το ID = 10 ειναι και στους δύο πίνακες το ίδιο Record
          //π.χ. στον πίνακα Πελάτες το ID=10 στον εναν είναι ο Παπαδόπουλος στον άλλον Γιαννούτσος
    }

    Ελπίζω να βοήθησα

    Νάσος


    "Success is the ability to go from one failure to another with no loss of enthusiasm."
    Winston Churchill

    "Quality means doing it right when no one is looking."
    Henry Ford

  •  08-01-2008, 10:35 38904 σε απάντηση της 38900

    Απ: Γεμισμα DataSet με DataAdapter

    Οι χρηστες δεν θα μπορουν να καταχωρουν κατα την διαρκεια του update να κανουν εγγραφες και νομιζω το update θα γινεται πολυ σπανια.
    Οι πινακες και στις δυο βασεις δεν θα ειναι αδειοι...αλλα δεν υπαρχει προβλημα αν υπαρχουν διπλοεγγραφες.
  •  08-01-2008, 10:52 38906 σε απάντηση της 38904

    Απ: Γεμισμα DataSet με DataAdapter

    Μμμμ... Πίνακες χωρίς primary key?! Τι σκοπό εξυπηρετούν; Ακόμα και αν όντως δεν χρειάζεται το PK καλό θα είναι να υπάρχει.


    Vir prudens non contra ventum mingit
  •  08-01-2008, 11:11 38907 σε απάντηση της 38906

    Απ: Γεμισμα DataSet με DataAdapter

    Δεν ξερω να πω την αληθεια καθως η εφαρμογη δεν ειναι δικη μου. Φανταζομαι η συγκεκριμενη πινακες ειναι μονο για αποθηκευση καποιων δεδομενων.
  •  08-01-2008, 11:44 38910 σε απάντηση της 38897

    Απ: Γεμισμα DataSet με DataAdapter

    kallileo:
    Εχω δυο αρχεια mdb με ακριβως την ιδια δομη των πινακων. Περιπου 15 πινακες το καθενα. Θελω να μπορω να κανω απλο INSERT τα δεδομενα τον πινακων που δεν εχουν κλειδι απο το ενα αρχειο στον αντιστοιχο πινακα του αλλου αρχειου και οσοι πινακες εχουν κλειδι να γινεται τσεκ του κλειδιου και αν δεν προυπαρχει να εισαγεται η εγγραφη


    Να σου πω, ειδικά αν γίνεται σπάνια τότε καλύτερα να το κάνεις με απλά queries. Αν λινκάρεις τους πίνακες από το ένα mdb στο άλλο και γράψεις απλά queries για να κάνεις δουλειά χωρίς να μπλέξεις με dataset. Το πολύ πολύ να χρησιμοποιήσεις μια SQLcommand για να τα καλείς από μια φόρμα διαδοχικά με ένα κουμπάκι. Απλά πράγματα, μην σκέφτεσαι πολυπλοκα.

    Manos
  •  08-01-2008, 13:44 38920 σε απάντηση της 38910

    Απ: Γεμισμα DataSet με DataAdapter

    Στην αρχη ετσι το ειχα σκεφτει και αυτο ειδα σε παραδειγματα στο Ιντερνετ αλλα δεν καταλαβα πως ακριβως μπορω να κανω ταυτοχρονα link μεταξυ δυο πινακων που βρισκονται σε δυο ξεχωριστα αρχεια.

    INSERT table1 (xx,yy, zz)
    SELECT xx, yy, zz
    FROM table2

    Δεν θα μπορουσα να εφαρμοσω κατι παρομοιο οπως το παραπανω query καπως?
  •  08-01-2008, 14:48 38929 σε απάντηση της 38920

    Απ: Γεμισμα DataSet με DataAdapter

    Θα ανοίξεις το destination αρχείο. Θα πας στους πίνακες δεξί κλικ μέσα στο χώρο των πινάκων link table και θα διαλέξεις το άλλο αρχείο και τον συγκεκριμένο πίνακα.
    Μετά θα πας στα queries και θα φτιάξεις ένα insert query χρησιμοποιώντας το γραφικό περιβάλλον της access. Είναι απλό ψάξε για Link tables σε access, δεν θα έχεις πρόβλημα.
    πχ

    INSERT INTO table1( f1,f2)
    SELECT linkedtable.Code AS Expr1, linkedtable.Descr AS Expr2
    FROM linkedtable;

    όπου ο linkedtable είναι ο link πίνακας στο άλλο αρχείο και table1 αυτός που θέλεις να ενημερώσεις

    Manos
  •  08-01-2008, 16:05 38948 σε απάντηση της 38929

    Απ: Γεμισμα DataSet με DataAdapter

    ΟΚ. Θα το δοκιμασω...

    Αλλη ερωτηση.
    Ας που οτι εχω κανει τις οποιες αλλαγες θελω στο DataSet. Με ποιο τροπο λεω στο DataAdapter να εφαρμοσει της αλλαγες στους πινακες της βασης?

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