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

 

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

Βοηθεια σε dataAdapter.Update

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

    Βοηθεια σε dataAdapter.Update

    Εχω τον εξης κώδικα όπου κάνω merge δυο DataTables. Το θέμα είναι ότι δεν μπορώ να εφαρμόσω στις αλλαγές πίσω στην βάση.
    public void MergeTables(string connS1, string connS2)
    {
    string connString1 = @"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + connS1;
    string connString2 = @"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + connS2;
    OleDbConnection oleConn1 = new OleDbConnection(connString1);
    OleDbConnection oleConn2 = new OleDbConnection(connString2);
    string cmd1 = "SELECT *FROM db1_table1";
    string cmd2 = "SELECT *FROM db2_table1";
    da1 = new OleDbDataAdapter(cmd1, oleConn1);
    da2 = new OleDbDataAdapter(cmd2, oleConn2);
    ds1 = new DataSet();

    da1.Fill(ds1, "db1_table1");
    da2.Fill(ds1, "db2_table1");

    ds1.Tables["db1_table1"].Merge(ds1.Tables["db2_table1"]);

    OleDbCommandBuilder cmdBld = new OleDbCommandBuilder(da1);
    da1.UpdateCommand = cmdBld.GetUpdateCommand();
    @da1.Update(ds1, "db1_table1");
    ds1.AcceptChanges();

    }
  •  07-04-2008, 19:06 41409 σε απάντηση της 41404

    Απ: Βοηθεια σε dataAdapter.Update

    Όταν κάνεις da1.Update οι εγγραφές που ενημερώνονται στην βάση είναι αυτές που έχουν έχουν RowState Changed ή Added στο datatable. Μετά από Fill και Merge καμιά εγγραφή δεν έχει αυτό το state.

    Οι εγγραφές παίρνουν αυτό το state όταν γίνουν αλλαγές σε αυτές ή όταν καλέσεις την SetModified ή SetAdded method της εγγραφής. Δοκίμασε το παρακάτω:

            public void MergeTables(string connS1, string connS2)
            {
                string connString1 = @"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + connS1;
                string connString2 = @"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + connS2;
                OleDbConnection oleConn1 = new OleDbConnection(connString1);
                OleDbConnection oleConn2 = new OleDbConnection(connString2);
                string cmd1 = "SELECT *FROM db1_table1";
                string cmd2 = "SELECT *FROM db2_table1";
                OleDbDataAdapter da1 = new OleDbDataAdapter(cmd1, oleConn1);
                OleDbDataAdapter da2 = new OleDbDataAdapter(cmd2, oleConn2);
                DataSet ds1 = new DataSet();

                da2.Fill(ds1, "db2_table1");

                foreach (DataRow row in ds1.Tables["db2_table1"].Rows)
                    row.SetAdded();

                OleDbCommandBuilder cmdBld = new OleDbCommandBuilder(da1);
                da1.UpdateCommand = cmdBld.GetUpdateCommand();
                @da1.Update(ds1, "db2_table1");
            }

    Όπως βλέπεις δεν χρειάζεται καθόλου να φορτώσεις τον 1ο πίνακα. 

    Επίσης το da1.Update η AcceptChanges καλείται αυτόματα, οπότε δεν χρειάζεται να την καλέσεις.


    Dimitris Papadimitriou
    Software Development Professional
    dotNETZone.gr News

    Οι απαντήσεις παρέχονται για συγκεκριμένες ερωτήσεις και χωρίς καμιά εγγύηση. Διαβάστε επίσης τους όρους χρήσης.
  •  07-04-2008, 19:08 41410 σε απάντηση της 41409

    Απ: Βοηθεια σε dataAdapter.Update

    Όλα αυτά βέβαια για να κάνεις κάτι για το οποίο υπάρχουν πολύ πιο αποδοτικοί τρόποι. π.χ. αν κάνεις ένα insert into select statement μεταξύ των δυο βάσεων το αποτέλεσμα θα είναι απείρως πιο γρήγορο!

    Dimitris Papadimitriou
    Software Development Professional
    dotNETZone.gr News

    Οι απαντήσεις παρέχονται για συγκεκριμένες ερωτήσεις και χωρίς καμιά εγγύηση. Διαβάστε επίσης τους όρους χρήσης.
  •  08-04-2008, 11:42 41419 σε απάντηση της 41410

    Απ: Βοηθεια σε dataAdapter.Update

    OK. Ευχαριστώ...καταλαβα τωρα γιατι δεν γινονταν ενημερωση.

    Οσο για το δευτερο μηπως μπορεις να δωσεις ενα παραδειγμα πως μπορω να γραψω το query που θα βαλω μεσα στο SQL Command γιατι μου συγχεει το γεγονος οτι ειναι απο διαφορετικες βασεις και οχι απο μια.
  •  11-04-2008, 14:33 41477 σε απάντηση της 41409

    Απ: Βοηθεια σε dataAdapter.Update

    Δοκιμασα το συγκεκριμενο οπως ειναι αλλα και με το να φορτωσω και τον πρωτο πινακα.

    Μου βγαζει σφαλμα συνταξης στην δήλωση "INSERT INTO" στην τελευταια εντολη.
  •  11-04-2008, 14:42 41478 σε απάντηση της 41477

    Απ: Βοηθεια σε dataAdapter.Update

    Όσο για την άλλη λύση που λέγαμε... δες εδώ.

    Τώρα για το σφάλμα σύνταξης που λες... τι μπορεί να πει κανείς; Μήπως να μας πεις ΠΟΙΟ ΑΚΡΙΒΩΣ είναι το σφάλμα που παίρνεις και σε ΠΟΙΑ ΑΚΡΙΒΩΣ εντολή; Tongue Tied


    Dimitris Papadimitriou
    Software Development Professional
    dotNETZone.gr News

    Οι απαντήσεις παρέχονται για συγκεκριμένες ερωτήσεις και χωρίς καμιά εγγύηση. Διαβάστε επίσης τους όρους χρήσης.
  •  11-04-2008, 15:12 41479 σε απάντηση της 41478

    Απ: Βοηθεια σε dataAdapter.Update

    Το σφάλμα που πεταει το VS είναι το εξής:

    Σφάλμα σύνταξης στη δήλωση INSERT INTO.
    Στην εντολη @da1.Update(ds1, "db2_table1");

    Θα μπορουσε να υπαρχει προβλημα διπλες εγγραφες που υπαρχουν και στους δυο πινακες?


    Για την αλλη λυση εχω το εξης προβλημα. Ειχα βρει την συνταξη της SQL με το INSERT INTO SELECT αλλα σε μια φαση λες " απλά βάζεις σαν πρόθεμα το όνομα της βάσης, πριν το όνομα του πίνακα".

    Οταν ειναι δυο βασεις σε SQL Server το καταλαβαινω το προθεμα που πρεπει να μπει. Τωρα που ειναι ομως δυο mdb αρχεια τι πρεπει να μπει σαν προθεμα ωστε να προσδιοριζει την βαση?
    Η φυσικη διαδρομη προς το αρχειο?
  •  17-04-2008, 16:13 41598 σε απάντηση της 41479

    Απ: Βοηθεια σε dataAdapter.Update

    Για να έχεις πρόσβαση από έναν server σε έναν άλλο (είτε αυτός είναι άλλος sql server είτε access, oracle κλπ.) πρέπει να χρησιμοποιήσεις την sp_addlinkedserver. Διάβασε λίγο γι αυτήν και δες τα παραδείγματα. Έχει και για access.

    Dimitris Papadimitriou
    Software Development Professional
    dotNETZone.gr News

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