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

 

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

Identity Value όταν κάνω insert νέες εγγραφές με Mysql

Îåêßíçóå áðü ôï ìÝëïò Azular. Τελευταία δημοσίευση από το μέλος Παναγιώτης Καναβός στις 03-12-2009, 21:24. Υπάρχουν 7 απαντήσεις.
Ταξινόμηση Δημοσιεύσεων: Προηγούμενο Επόμενο
  •  01-12-2009, 17:30 55594

    Identity Value όταν κάνω insert νέες εγγραφές με Mysql

    Μέχρι τώρα έχω χρησιμοποιήσει OleDbCommand για να κάνω insert queries σε μια βάση της Access. Επειδή δεν μου επέστρεφε την τιμή του πεδίου auto-increment key field χρησιμοποιούσα ένα δεύτερο OleDbCommand:ως εξής
     Public cmdGetIdentity As New OleDb.OleDbCommand("SELECT @@IDENTITY", Connection)
    Στην συνέχει δήλωνα ένα sub για τον πίνακα που με ενδιέφερε
        Private Sub RowUpdatedSet_FOREAS(ByVal sender As Object, ByVal e As OleDb.OleDbRowUpdatedEventArgs)
    If e.Status = UpdateStatus.Continue AndAlso e.StatementType = StatementType.Insert Then
    ' If this is an INSERT operation...
    ' Execute the post-update query to fetch new @@Identity
    cmdGetIdentity.Transaction = Adapter_Foreas.InsertCommand.Transaction
    e.Row("FOREASID") = CInt(cmdGetIdentity.ExecuteScalar)

    e.Row.AcceptChanges()
    End If
    End Sub

    Και τέλος αυτό στον adapter,

    AddHandler Adapter_Foreas.RowUpdated, AddressOf RowUpdatedSet_FOREAS

    Έτσι μου επέστρεφε την τιμή του πρωτεύοντος κλειδιού της νέας εγγραφής στην βάση.

    Το ερώτημα είναι ότι θέλω να κάνω το ίδιο αλλά με βάση δεδομένων την Mysql.

    Τι πρέπει να αλλάξω; φαντάζομαι το πρώτο είναι το OleDbCommand να γίνει MySqlCommand

    Τι αλλαγές πρέπει να κάνω στο Sub RowUpdatedSet_FOREAS και στο "SELECT @@IDENTITY";


  •  01-12-2009, 18:04 55598 σε απάντηση της 55594

    Απ: Identity Value όταν κάνω insert νέες εγγραφές με Mysql

    Αντί να προσπαθείς να αλλάξεις "στα γρήγορα" ένα project για μία database ώστε να παίξει με μία άλλη εντελώς διαφορετική, κοίτα το documentation. Ειδικά αυτό που ζητάς αναφέρεται ως παράδειγμα.

    Οι δύο βάσεις έχουν πολύ σημαντικές διαφορές μεταξύ τους, τόσο στον τρόπο λειτουργίας όσο και στις εντολές που υποστηρίζουν. Θα πρέπει να προσέξεις τί κάνει ο κώδικας σου και πως δουλεύουν οι βάσεις, διαφορετικά θα σπαταλήσεις πάρα πολύ χρόνο με "μικροδιορθώσεις" οι οποίες θα δημιουργούν νέα προβλήματα συνεχώς.


    Παναγιώτης Καναβός, Freelancer
    Twitter: http://www.twitter.com/pkanavos
  •  02-12-2009, 10:18 55614 σε απάντηση της 55598

    Απ: Identity Value όταν κάνω insert νέες εγγραφές με Mysql

    Απ'ότι κατάλαβα πρέπει στο commandbuilder να ορίσουμε το ReturnGeneratedIdentifiers σε true για να λειτουργεί αυτή η δυνατότητα. Έχω τον connector 6.2 που απ'ότι φαίνεται έχει ήδη καταργηθεί το ReturnGeneratedIdentifiers.

    Version 6.1.2
    - fixed hanging after losing network connectivity to server (bug#43761)
      Better fix is planned for 6.2
    - removed ReturnGeneratedIdentifiers.  We are now treating the command builder exactly
      the same way SqlClient does
    - fixed some bugs with session state provider
    - fixed typo in asp.net config wizard

    Σε αυτή την περίπτωση πως το χειρίζομαι το θέμα; Τι εννοεί όταν λέει:We are now treating the command builder exactly
      the same way SqlClient does
  •  02-12-2009, 22:51 55635 σε απάντηση της 55614

    Απ: Identity Value όταν κάνω insert νέες εγγραφές με Mysql

    Έχω δημιουργήσει τα απαραίτητα commands (select,delete,insert,update) μέσω του tableadapter wizard.
    όλα τα commands δουλεύουν εντάξει. Το πρόβλημα είναι με τις νέες εγγραφες και το Insert command.
    Όταν κάνω update με τον dataadapter ναι μεν εγγραφονται οι νέες εγγραφες στον server αλλά στον dataset δεν μου επιστρέφονται τα νέα ids(τα οποία προκύπτουν από autoincrement field στον server) και δεν ενημερώνεται το σχετικό πεδίο .
    Δεν ξέρω πως να χειριστώ το θέμα.Μήπως να χρησιμοποιήσω mysqlcommandbuilder αντι να ορίζω ξεχωριστά τα commands;
    Πως συνεχίζω;Καμία ιδέα;
  •  03-12-2009, 15:52 55652 σε απάντηση της 55635

    Απ: Identity Value όταν κάνω insert νέες εγγραφές με Mysql

    Εντάξει το βρήκα με λίγο ψάξιμο έπρεπε να γράψω το InsertCommand string ως εξής:
    INSERT INTO `DBTEST`.`eidos` (`EIDOS`) VALUES (@EIDOS); SELECT LAST_INSERT_ID() AS EIDOSID
    Αν βοηθάει κανένα και για μελλοντική χρήση στο Datatable όρισα και τα εξής:
            ds.Tables("eidos").Columns("EIDOSID").AutoIncrement = True
    ds.Tables("eidos").Columns("EIDOSID").AllowDBNull = False
    ds.Tables("eidos").Columns("EIDOSID").Unique = True
    ds.Tables("eidos").Columns("EIDOSID").AutoIncrementSeed = -1
    ds.Tables("eidos").Columns("EIDOSID").AutoIncrementStep = -1

    Για να μην έχω σύγχυση ανάμεσα στα id του Dataset και του server.
    Ελπιζω να είναι σωστή η λογική μου, αλλά αφού παίζει μια χάρα προς το παρόν το αφήνω έτσι και προχωράω.Smile

  •  03-12-2009, 16:28 55655 σε απάντηση της 55652

    Απ: Identity Value όταν κάνω insert νέες εγγραφές με Mysql

    Σωστή είναι. Έβαλα τελικά MySQL για να δω τί γίνεται με τον Connector και για να βρω μία απάντηση για την ερώτηση του Azular για Unicode. Γενικά στο ADO.NET για να πάρεις την τιμή ενός column που δημιουργείται στη βάση πρέπει το Insert/Update command που χρησιμοποιείς να σου επιστρέψει την τιμή αυτή. Αυτό μπορεί να γίνει είτε με ένα επιπλέον select είτε, αν χρησιμοποιείς stored procedures, με ένα output parameter.
    Παναγιώτης Καναβός, Freelancer
    Twitter: http://www.twitter.com/pkanavos
  •  03-12-2009, 18:56 55663 σε απάντηση της 55655

    Απ: Identity Value όταν κάνω insert νέες εγγραφές με Mysql

    Στο update command γιατί χρειάζεται;
    Υπάρχει περίπτωση η βάση να σου αλλάξει την τιμή ενός κλειδιού μιας υπάρχουσας εγγραφής και κατά το Update να χρειάζεται επιστροφή και ενημέρωση στον Dataset?
  •  03-12-2009, 21:24 55668 σε απάντηση της 55663

    Απ: Identity Value όταν κάνω insert νέες εγγραφές με Mysql

    Στην περίπτωση του identity δεν χρειάζεται. Μπορεί όμως να έχεις κάποιο calculated πεδίο το οποίο αλλάζει τιμή μετά από ένα update. Για να πάρεις τη νέα τιμή του calculated πεδίου προσθέτεις ένα select στο update command για να πάρεις πίσω τη νέα τιμή.


    Παναγιώτης Καναβός, Freelancer
    Twitter: http://www.twitter.com/pkanavos
Προβολή Τροφοδοσίας RSS με μορφή XML
Με χρήση του Community Server (Commercial Edition), από την Telligent Systems