Primärschlüssel des geschriebenen Eintrags zurückerhalten

  • VB.NET
  • .NET (FX) 4.5–4.8

Es gibt 3 Antworten in diesem Thema. Der letzte Beitrag () ist von MrTrebron.

    Primärschlüssel des geschriebenen Eintrags zurückerhalten

    Moin,

    ich lege mit einem INSERT Befehl einen Eintrag in einer Datenbank an:

    VB.NET-Quellcode

    1. con2.Open()
    2. cmd2.CommandText = "INSERT INTO PATDATPAT
    3. (PatNummer, PatName, PatVorname, PatGeb, PatStra, PatPLZ, PatOrt, PatSex)
    4. VALUES
    5. ('" & patGUID & "','" & LastName & "','" & FirstName & "','" & BithDate.ToString("yyyy-MM-dd HH:mm:ss") & "','" & Street & "','','" & Ort & "','" & Gender & "')
    6. SELECT SCOPE_IDENTITY() AS [SCOPE_IDENTITY];"
    7. reader2 = cmd2.ExecuteReader
    8. Do While reader2.Read
    9. MsgBox(reader2("SCOPE_IDENTITY"))
    10. Loop


    Jetzt versuche ich, wie man Sieht erfolglos, den Primärschlüssel dieses Eintrags für die weitere Verwendung abzufragen. Ich habe schon raus, das SELECT SCOPE_IDENTITY() AS [SCOPE_IDENTITY] hier der richtige Befehl ist, im Management-Studio klappt das auch.
    Aber wie bekomme ich den Wert nun zurück, dass ich ihn weiter Verwenden kann?
    ich lass das immer von Dataset und DataAdapter erledigen.
    Hier: Dataset->Db (DbPersistance) habe ich ein System programmiert, damit kann man Datenbanken lesen und schreiben so einfach wie mw. eine textDatei.

    Ein weiterer Vorteil ist, dass dabei DbParameter verwendet werden - dein Ansatz öffnet ja ScheunenTore für Sql-Injection-Angriffe: Must-Know: Sql-Injection
    Bei einer Access-DB verwende ich folgende Funktion:

    Quellcode

    1. Public Function GetAutoID(ByVal Conn As OleDb.OleDbConnection) As Integer
    2. Dim SQL As String = "SELECT @@IDENTITY"
    3. GetAutoID = 0
    4. Using cmd As OleDb.OleDbCommand = New OleDb.OleDbCommand(SQL, Conn)
    5. GetAutoID = CInt(cmd.ExecuteScalar)
    6. End Using
    7. End Function


    Und aufrufen tue ich das dann nach dem Insert-Befehl.

    Quellcode

    1. Dim AutoID as Integer
    2. [...]
    3. cmdInsert.ExecuteNonQuery()
    4. AutoID = GetAutoID(oledb_Notizen)
    Definitiv kein solches SQL zulassen sondern Queries mit Parametern.

    Dafür braucht man aber keine Uralt Technik DataAdapter und Datasets.

    Wenn man sowie schon neu anfängt, dann ein ORM wie Entity Framework
    Die deutsche Sprache ist Freeware, du kannst sie benutzen, ohne dafür zu bezahlen. Sie ist aber nicht Open Source, also darfst du sie nicht verändern, wie es dir gerade passt.