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

 

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

Πως θα πάρω το τελευταίο Id πίνακα?

Îåêßíçóå áðü ôï ìÝëïò gmlogic. Τελευταία δημοσίευση από το μέλος gmlogic στις 18-09-2006, 09:23. Υπάρχουν 43 απαντήσεις.
Σελίδα 2 από 3 (44 εγγραφές)   < 1 2 3 >
Ταξινόμηση Δημοσιεύσεων: Προηγούμενο Επόμενο
  •  09-09-2006, 03:32 16496 σε απάντηση της 16446

    Απ: Πως θα πάρω το τελευταίο Id πίνακα?

    Σας ευχαριστώ πολύ για τις απαντήσεις σας και το ενδιαφέρον σας

    Πραγματικά θέλω να πάρω το ID σε μία μεταβλητή που μόλις δημιουργήθηκε για να κάνω insert και σε άλλους συνδεδεμένους πίνακες

    Οπότε η ερώτηση είναι πως θα δώσω την SCOPE_IDENTITY

    Έκανα τα εξής

    Select Case data_row_state

    Case DataRowState.Added

    da_Sql.InsertCommand = command_builder.GetInsertCommand()

    da_Sql.InsertCommand.CommandText += ";SELECT SCOPE_IDENTITY())"

    Αλλά δεν καταλαβαίνω πως θα πάρω το ID σε μιά μεταβλητή .... :)


    George Matzouranis
  •  09-09-2006, 09:43 16497 σε απάντηση της 16496

    Απ: Πως θα πάρω το τελευταίο Id πίνακα?

    Για την ακρίβεια πρέπει να γράψεις το εξής:

    da_Sql.InsertCommand.CommandText += "SELECT PΚ_COLUMN, COL1, COL2.... FROM MYTABLE WHERE PK_COLUMN = SCOPE_IDENEITY()"

    όπου PK_COLUMN είναι το όνομα της στήλης που είναι Primary Key και AutoIncrement.

    Ακριβώς μετά το update με τον dataadapter η εγγραφή σου (DataRow) θα έχει το τελευταίο identity. Διάβασε το άρθρο που σου έδωσα στην πρώτη μου απάντηση. Τα λέει όλα.
    Dimitris Papadimitriou
    Software Development Professional
    dotNETZone.gr News

    Οι απαντήσεις παρέχονται για συγκεκριμένες ερωτήσεις και χωρίς καμιά εγγύηση. Διαβάστε επίσης τους όρους χρήσης.
  •  09-09-2006, 09:47 16498 σε απάντηση της 16497

    Απ: Πως θα πάρω το τελευταίο Id πίνακα?

    Γενικά, το σημείο αυτό είναι ένα από τα λίγα σημεία που το ADO.NET υστερεί πολύ σε σχέση με τον προκάτοχό του ADO. Όσοι έχουν γράψει κώδικα π.χ. σε VB6 ξέρουν ότι δεν χρειαζόταν καμιά επιπλέον μέριμνα για να πάρει κανείς το autoincrement πεδίο μετά από ένα insert στη βάση.
    Dimitris Papadimitriou
    Software Development Professional
    dotNETZone.gr News

    Οι απαντήσεις παρέχονται για συγκεκριμένες ερωτήσεις και χωρίς καμιά εγγύηση. Διαβάστε επίσης τους όρους χρήσης.
  •  09-09-2006, 10:05 16499 σε απάντηση της 16407

    Απ: Πως θα πάρω το τελευταίο Id πίνακα?

    Γιατί όχι με OUTPUT INSERTED αν μιλάμε για MSSQL2005?
    Μην αφήνετε τα media να σας "ταΐζουν"!
  •  09-09-2006, 11:28 16502 σε απάντηση της 16497

    Απ: Πως θα πάρω το τελευταίο Id πίνακα?

    Κάτι δεν κάνω καλά σε αυτά που μου λές Δημήτρη

    Δίνω

    Dim Changes As DataTable

    Changes = data_table.GetChanges(data_row_state)

    If Not (Changes Is Nothing) Then

    'Προσοχή...Χρειάζονται όλα τα Fields του Changes και του sSQL για να δουλέψει το command_builder

    sSQL = "SELECT * FROM " & data_table.TableName

    Dim command As DbCommand = conn.CreateCommand()

    command.CommandText = sSQL

    Dim da_Sql As DbDataAdapter = dataFactory.CreateDataAdapter()

    ' Create INSERT, UPDATE, and DELETE commands.

    Dim command_builder As DbCommandBuilder = dataFactory.CreateCommandBuilder() ' = da_Sql

    da_Sql.SelectCommand = command

    command_builder.DataAdapter = da_Sql

    command.Transaction = transaction

    '@

    Select Case data_row_state

    Case DataRowState.Added

    da_Sql.InsertCommand = command_builder.GetInsertCommand()

    da_Sql.InsertCommand.CommandText += ";SELECT TIM1ID FROM TIM1 WHERE (TIM1ID = SCOPE_IDENTITY())"

    .

    .

    .

    da_Sql.Update(Changes)

    Dim dt As New DataTable

    da_Sql.Fill(dt)

    Αλλά στο dt μου φέρνει όλα τά rows to dt

    Πως θα πάρω το TIM1ID column


    George Matzouranis
  •  09-09-2006, 16:20 16503 σε απάντηση της 16502

    Απ: Πως θα πάρω το τελευταίο Id πίνακα?

    Με αυτό που σου είπα να κάνεις, λογικά, μετά το da_sql.update πρέπει στο changes να έχεις τα id που θέλεις.

    Νομίζω όμως ότι στο select που βάζεις πίσω από το insert πρέπει να κάνεις select όλες τις στήλες: select tim1id, col1, col2, col3... from tim1 where tim1id=scope_identity()


    Dimitris Papadimitriou
    Software Development Professional
    dotNETZone.gr News

    Οι απαντήσεις παρέχονται για συγκεκριμένες ερωτήσεις και χωρίς καμιά εγγύηση. Διαβάστε επίσης τους όρους χρήσης.
  •  09-09-2006, 18:55 16504 σε απάντηση της 16407

    Απ: Πως θα πάρω το τελευταίο Id πίνακα?

    Δημήτρη το έκανα και έτσι αλλά CTIM1ID μου φέρνει 0

    Select Case data_row_state

    Case DataRowState.Added

    da_Sql.InsertCommand = command_builder.GetInsertCommand()

    da_Sql.InsertCommand.CommandText += ";SELECT * FROM TIM1 WHERE (TIM1ID = SCOPE_IDENTITY())"

    ....

    End Select

    da_Sql.Update(Changes)

    Dim CTIM1ID As Integer = Changes.Rows(0).Item("TIM1ID")

    CTIM1ID μου φέρνει 0

    Δέν ξέρω τι συμβαίνει

    Μήπως επειδή χρησιμοποιώ το command_builder ?
    George Matzouranis
  •  09-09-2006, 19:48 16505 σε απάντηση της 16504

    Απ: Πως θα πάρω το τελευταίο Id πίνακα?

    Ζητώ συγνώμη. Έψαξα λίγο παραπάνω τον κώδικά μου και βρήκα και αυτό!

    da_Sql.InsertCommand.UpdatedRowSource = UpdateRowSource.Both

    Αν δεν σου δουλέψει, αντικατέστησε το * στο select με την λίστα των στηλών. Εγώ έτσι το κάνω.
    Dimitris Papadimitriou
    Software Development Professional
    dotNETZone.gr News

    Οι απαντήσεις παρέχονται για συγκεκριμένες ερωτήσεις και χωρίς καμιά εγγύηση. Διαβάστε επίσης τους όρους χρήσης.
  •  09-09-2006, 20:13 16506 σε απάντηση της 16504

    Απ: Πως θα πάρω το τελευταίο Id πίνακα?

    Δημήτρη και με αυτή τη αλλαγή πάλι δεν μου φέρνει Changes.Rows(0).Item("TIM1ID") ίσον 0

    Case DataRowState.Added

    da_Sql.InsertCommand = command_builder.GetInsertCommand()

    Dim CFields As String = ""

    For RCount = 0 To  Changes.Columns.Count - 1

    CFields +=  Changes.Columns(RCount).ColumnName & ","

    Next

    sSQL = "SELECT " + Mid(CFields, 1, Len(Trim(CFields)) - 1) + " " + "FROM " & Changes.TableName & " WHERE " & Changes.Columns(0).ColumnName & " = SCOPE_IDENTITY())"

    da_Sql.InsertCommand.CommandText += ";" & sSQL
    da_Sql.InsertCommand.UpdatedRowSource = UpdateRowSource.Both

    Το sSQL περιέχει όλα τα πεδία
    Θα με σκάση τελικά :)


    George Matzouranis
  •  09-09-2006, 22:25 16507 σε απάντηση της 16499

    Απ: Πως θα πάρω το τελευταίο Id πίνακα?

     Mitsaras wrote:
    Γιατί όχι με OUTPUT INSERTED αν μιλάμε για MSSQL2005?


    'Ελα ντε.. Να ανακαλύψουν τον τροχό προσπαθούν πάλι?

    Παναγιώτης Κεφαλίδης

    "Για να επιτύχεις, θα πρέπει το πάθος σου για την επιτυχία να είναι μεγαλύτερο απο τον φόβο σου για την αποτυχία"

    Οι απαντήσεις παρέχονται για συγκεκριμένες ερωτήσεις και χωρίς καμιά εγγύηση. Παρακαλώ διαβάστε τους όρους χρήσης.
  •  09-09-2006, 23:00 16509 σε απάντηση της 16507

    Απ: Πως θα πάρω το τελευταίο Id πίνακα?

     pkefal wrote:
     Mitsaras wrote:
    Γιατί όχι με OUTPUT INSERTED αν μιλάμε για MSSQL2005?


    'Ελα ντε.. Να ανακαλύψουν τον τροχό προσπαθούν πάλι?

    Αγαπητέ φίλε Παναγιώτη, αν έχεις να προτείνεις κάτι καλύτερο, μπορείς να το κάνεις μήπως και βοηθήσεις! Αν πάλι αισθάνεσαι αρκετά ικανός ώστε να κάνεις μόνο ειρωνικά σχόλια για αυτή την συζήτηση... no comment!


    Dimitris Papadimitriou
    Software Development Professional
    dotNETZone.gr News

    Οι απαντήσεις παρέχονται για συγκεκριμένες ερωτήσεις και χωρίς καμιά εγγύηση. Διαβάστε επίσης τους όρους χρήσης.
  •  10-09-2006, 12:12 16512 σε απάντηση της 16509

    Απ: Πως θα πάρω το τελευταίο Id πίνακα?

     papadi wrote:

     pkefal wrote:
     Mitsaras wrote:
    Γιατί όχι με OUTPUT INSERTED αν μιλάμε για MSSQL2005?


    'Ελα ντε.. Να ανακαλύψουν τον τροχό προσπαθούν πάλι?

    Αγαπητέ φίλε Παναγιώτη, αν έχεις να προτείνεις κάτι καλύτερο, μπορείς να το κάνεις μήπως και βοηθήσεις! Αν πάλι αισθάνεσαι αρκετά ικανός ώστε να κάνεις μόνο ειρωνικά σχόλια για αυτή την συζήτηση... no comment!



    Δημήρτη, προς θεού, δεν το είπα ειρωνικά..Περισσότερο σαρκαστικό στην συζήτηση ήτανε παρά ειρωνία προς στους συναδέλφους Smile Όπως και να έχει μπορεί να θέλατε όντως να ανακαλύψετε τον δικό σας τροχό για δικούς σας λόγους Stick out tongue

    Λοιπόν, στο θέμα μας..

    Μπορείς απλά μέσα στην stored procedure να τη βάλεις να επιστρέφει το ID μετά το insert.Αυτό το κάνεις.. πχ
    INSERT INTO mytable(myfield) OUTPUT INSERTED.id VALUES('myvalue')
    Τώρα, αν θες να το κρατάει σε κάποια var (ας την πούμε @oID) κάντο
    INSERT INTO mytable(myfield) OUTPUT INSERTED.id ΙΝΤΟ @oID VALUES('myvalue')

    Σε περίπτωση που θες άλλο value απο το ID μπορείς απλά να αλλάξεις το INSERTED.id σε INSERTED.myfield και να πάρεις την τιμή για όποιο field θέλεις..

    Παναγιώτης Κεφαλίδης

    "Για να επιτύχεις, θα πρέπει το πάθος σου για την επιτυχία να είναι μεγαλύτερο απο τον φόβο σου για την αποτυχία"

    Οι απαντήσεις παρέχονται για συγκεκριμένες ερωτήσεις και χωρίς καμιά εγγύηση. Παρακαλώ διαβάστε τους όρους χρήσης.
  •  10-09-2006, 13:10 16515 σε απάντηση της 16407

    Απ: Πως θα πάρω το τελευταίο Id πίνακα?

    Επειδή ακριβώς το χρησιμοποιώ κατά κόρον όταν χρειάζεται, θα ήταν χρήσιμο να ξέρουμε αν έχει κάποια (σοβαρή) επίπτωση στην απόδοση.
    Μην αφήνετε τα media να σας "ταΐζουν"!
  •  10-09-2006, 13:15 16516 σε απάντηση της 16515

    Απ: Πως θα πάρω το τελευταίο Id πίνακα?

     Mitsaras wrote:
    Επειδή ακριβώς το χρησιμοποιώ κατά κόρον όταν χρειάζεται, θα ήταν χρήσιμο να ξέρουμε αν έχει κάποια (σοβαρή) επίπτωση στην απόδοση.


    Σχεδόν καμία απολύτως..Θα ψάξω μπας και ξεθάψω και το σχετικό άρθρο στο MSDN που εξηγεί αναλυτικά και το γιατί..

    Παναγιώτης Κεφαλίδης

    "Για να επιτύχεις, θα πρέπει το πάθος σου για την επιτυχία να είναι μεγαλύτερο απο τον φόβο σου για την αποτυχία"

    Οι απαντήσεις παρέχονται για συγκεκριμένες ερωτήσεις και χωρίς καμιά εγγύηση. Παρακαλώ διαβάστε τους όρους χρήσης.
  •  10-09-2006, 15:51 16519 σε απάντηση της 16506

    Απ: Πως θα πάρω το τελευταίο Id πίνακα?

    Λοιπόν !!!!

    Ποιό πάνω έχω τον κώδικα που ανάλογα το DataRowState φτιάχνει

    ο command_builder τα sql querys

    Μπορώ να πάρω το ID μετά το

    da_Sql.InsertCommand = command_builder.GetInsertCommand()

    ή δεν μπορώ?

    Ή πρέπει να αλλάξω τον κωδικά μου και να τα κάνω χειροκίνητα

    ή πρέπει να γυρίσω τα queries σε store procedures ή ......

    ή γιατί πρέπει να μιλάμε για MSSQL2005

    Δέν ξερω :)

    Όπως μς χαρά θα συμβούλευα ένα με λιγώτερη γνώση από μένα

    έτσι θέλω και εγώ να μάθω από κάποιον που ξέρει ποιό πολά από μένα

    γιατί σίγουρα κάποιος ξέρει ποιό πολλά από μένα ......

    Γιώργος Μ.
    George Matzouranis
Σελίδα 2 από 3 (44 εγγραφές)   < 1 2 3 >
Προβολή Τροφοδοσίας RSS με μορφή XML
Με χρήση του Community Server (Commercial Edition), από την Telligent Systems