Announcement

Collapse
No announcement yet.

Nach INSERT Befehl ID(autozähler) aktualisieren

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Nach INSERT Befehl ID(autozähler) aktualisieren

    Hallo,

    ich habe eine SQL Express DB, welche Folgende Spalten hat:
    eleID (Bigint, Identity mit +1)
    eleTitle (varchar)
    eleText (varchar)
    eleCode (varchar)

    Die Datenbank öffne ich mit einem SqlDataAdapter, bei welchem ich die Commands (.InsertCommand/.update.../.delete...) bereits erfolgreich definiert habe. Der SqlDataAdapter füllt ein DataSet, welches ich mit einer Binding Source an die Textboxen auf dem Formular binde.

    Ich kann Daten updaten und löschen. Beim Neueröffnen habe ich folgenden Command:
    daDatenAdapter.InsertCommand = New SqlCommand("INSERT INTO [Elements] (eleTitle,eleText,eleCode) VALUES " + _
    "(@eleTitle, @eleText, @eleCode)", Connection)
    Dim pc As SqlParameterCollection
    pc = daDatenAdapter.InsertCommand.Parameters
    pc.Add("@eleTitle", SqlDbType.VarChar, 100, "eleTitle")
    pc.Add("@eleText", SqlDbType.VarChar, 2000, "eleText")
    pc.Add("@eleCode", SqlDbType.VarChar, 2000, "eleCode")

    Die eleID übergebe ich nicht, da sie ja von der DB vergeben wird. Der Datensatz wird sauber eröffnet, inkl. der ID. Wie kann ich das Dataset mit den neuen IDs (bei den Neueröffneten Records) füllen.
    Wenn ich die Applikation schliesse und neu starte sind sie drin, das kann aber nicht die Lösung sein.

    Das ist der Update Befehl, welcher alle anstehenden Updates,Insert und delete ausführt:

    DB.daDatenAdapter.Update(DB.dsDatenSet.Tables(0))

    Mit diesen Befehlen habe ich es schon vergeblich versucht:
    DB.dsDatenSet.GetChanges()
    DB.daDatenAdapter.Fill(DB.dsDatenSet)


    Danke für eure Antworten.

  • #2
    Ufff, Habs jetzt trotzdem noch rausgefunden.
    Den roten Teil habe ich neu eingefügt, jetzt klappts.

    daDatenAdapter.InsertCommand = New SqlCommand("INSERT INTO [Elements] (eleTitle,eleText,eleCode) VALUES " + _
    "(@eleTitle, @eleText, @eleCode); SELECT @@IDENTITY AS eleID;", Connection)

    Comment


    • #3
      Wenn es sich um eine Multiuserumgebung handelt ist @@IDENTITY eine ganze schlechte Wahl. @@IDENTITY ist kontextunabhängig das heißt du bekommst die letzte eingefügte ID unabhängig von der Tabelle und unabhängig vom User bzw. Session. Zwischen Insert und Select kann dir aber irgendwer in die Quere kommen und eine neue ID generieren.

      @@SCOPE_IDENTITY ist wahrscheinlich die sicherere Wahl.

      Comment

      Working...
      X