SQL Statemant- UpDate und wenn nicht vorhanden InSert

  • VB.NET
  • .NET (FX) 4.0

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

    SQL Statemant- UpDate und wenn nicht vorhanden InSert

    Hallo ihr lieben,

    ich bräuchte wieder eure Hilfe.

    ich habe eine DBt mit drei spalten : ID / Name / Pfad

    Nun soll es so sein, das in die DBt geschaut werden soll ob der Name vorhanden ist, wenn Ja dann nur update der spalte Pfad.

    wenn aber der Name nicht vorhanden ist soll ein neuer Satz angelegt werden.

    mein erster versuch war:

    VB.NET-Quellcode

    1. Private Sub sql()
    2. Dim con As New SqlConnection
    3. Dim cmd As New SqlCommand
    4. Dim user As String = CStr(Replace(HP.lb_prüfer.Text, "\", ""))
    5. Dim path As String = CStr(Me.cb1.Text)
    6. Try
    7. con.ConnectionString = "Data Source=muster;Initial Catalog=man;User ID=asd;Password=asd;"
    8. con.Open()
    9. cmd.Connection = con
    10. cmd.CommandText = "INSERT INTO TEST (name,pfad) VALUES ('" & user & "','" & path & "') ON DUPLICATE KEY UPDATE pfad = '" & path & "';"
    11. Debug.Print(cmd.CommandText)
    12. cmd.ExecuteNonQuery()
    13. Catch ex As Exception
    14. MessageBox.Show("Error while inserting record on table..." & ex.Message, "Insert Records")
    15. Finally
    16. con.Close()
    17. End Try
    18. End Sub


    da kommt der Fehler, 'ON' inkorrekt

    also habe ich erstmal nur mit UpDate gemacht:

    VB.NET-Quellcode

    1. Private Sub sql()
    2. Dim con As New SqlConnection
    3. Dim cmd As New SqlCommand
    4. Dim user As String = CStr(Replace(HP.lb_prüfer.Text, "\", ""))
    5. Dim path As String = CStr(Me.cb1.Text)
    6. Try
    7. con.ConnectionString = "Data Source=muster;Initial Catalog=man;User ID=asd;Password=asd;"
    8. con.Open()
    9. cmd.Connection = con
    10. cmd.CommandText = "UPDATE [SAF].[dbo].[TEST]SET [name] = '" & user & "',[path_picture] = '" & path & "' WHERE [name] = '" & user & "'"
    11. Debug.Print(cmd.CommandText)
    12. cmd.ExecuteNonQuery()
    13. Catch ex As Exception
    14. MessageBox.Show("Error while inserting record on table..." & ex.Message, "Insert Records")
    15. Finally
    16. con.Close()
    17. End Try
    18. End Sub


    und hab mir hier gedacht wenn kein UpDate statt findet, soll ein Insert ausgelöst werden, aber hier kommt es nicht zum Catch...

    Vielen Dank im Voraus...
    nein, es tritt ja auch kein Fehler auf. Es wird nur keine Zeile geupdated.
    TryCatch ist hier fehl am Platz.
    Lies mal im ObjectBrowser, was zu DbCommand.ExecuteNonQuery() dokumentiert ist - insbesondere zum Rückgabewert.

    Objectbrowser kennste? - ansonsten: VisualStudio richtig nutzen (Google ist nicht deine Mami)
    Übrigens, wenn du mit typisiertem Dataset arbeiten tätest, dann könntest du in der Oberfläche Databinding für dich arbeiten lassen.
    Und für die Persistenz könntest du dir DataAdapter einrichten, das wäre stabiler, sicherer und einfacher.
    Guggemol die SampleSolution von Tipp & Trick: DbParameter