Datensätze ändern und speichern

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

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

    Datensätze ändern und speichern

    hallo,

    ich hbae ein kleines datenbank programm erstellt, und komme nicht mehr weiter. ich lasse mir die datensätze aus meiner datenbank in textboxen ausgeben was auch soweit ganz gut funktioniert. nun möchte ich einen datensatz ändern und speichern. nun mein problem: die änderung wird gespeichert aber leider werden alle datensätze in der datenbank überschrieben, sodass ich den bearbeiteten datensatz mehrmals in der datenbank habe. da komme ich im moment nicht weiter und benötige ein wenig unterstützung.

    hier der code:

    Verbindung zur datenbank:

    VB.NET-Quellcode

    1. Sub verbindung()
    2. c.ConnectionString = "Data Source=(LocalDB)\MSSQLLocalDB;AttachDbFilename=C:\Users\Christian\um2.mdf;Integrated Security=True;Connect Timeout=30"
    3. c.Open()
    4. Dim da As New SqlClient.SqlDataAdapter
    5. da.SelectCommand = (New SqlClient.SqlCommand("SELECT * FROM ku_um2_db", c))
    6. da.Fill(dt)
    7. c.Close()
    8. bs.DataSource = dt
    9. Dim b As Binding
    10. b = New Binding("Text", bs, "ID")
    11. IDTextBox.DataBindings.Add(b)
    12. b = New Binding("Text", bs, "Vorname")
    13. VornameTextBox.DataBindings.Add(b)
    14. b = New Binding("Text", bs, "Nachname")
    15. NachnameTextBox.DataBindings.Add(b)
    16. b = New Binding("Text", bs, "PLZ")
    17. PLZTextBox.DataBindings.Add(b)
    18. b = New Binding("Text", bs, "Ort")
    19. OrtTextBox.DataBindings.Add(b)
    20. b = New Binding("Text", bs, "Straße")
    21. StraßeTextBox.DataBindings.Add(b)
    22. b = New Binding("Text", bs, "Email")
    23. EmailTextBox.DataBindings.Add(b)
    24. b = New Binding("Text", bs, "Telefon")
    25. TelefonTextBox.DataBindings.Add(b)
    26. End Sub


    hier der code zum speichern der änderung:

    VB.NET-Quellcode

    1. Sub bearbeiten()
    2. posBearbeiten = bs.Position
    3. Dim sqlCmd As New System.Data.SqlClient.SqlCommand
    4. sqlCmd.Connection = c
    5. If Not neuerDatensatz Then 'Datensatz mit UPDATE aktualisieren
    6. sqlCmd.CommandText = "UPDATE ku_um2_db SET Vorname = '" & VornameTextBox.Text _
    7. & "', Nachname = '" & NachnameTextBox.Text _
    8. & "', PLZ = '" & PLZTextBox.Text & "', Ort = '" & OrtTextBox.Text _
    9. & "', Straße = '" & StraßeTextBox.Text & "', Email = '" & EmailTextBox.Text _
    10. & "', Telefon = '" & TelefonTextBox.Text & "'"
    11. Else
    12. sqlCmd.CommandText = "INSERT INTO ku_um2_db(Vorname, Nachname, PLZ, Ort, Straße, Email, Telefon)" _
    13. & "VALUES( '" & VornameTextBox.Text & "', '" & NachnameTextBox.Text & "', '" & PLZTextBox.Text _
    14. & "', '" & OrtTextBox.Text & "', '" & StraßeTextBox.Text & "', '" & EmailTextBox.Text & "', '" & TelefonTextBox.Text & "')"
    15. End If
    16. Try
    17. Debug.Print(sqlCmd.CommandText)
    18. Try
    19. sqlCmd.Connection.Open()
    20. sqlCmd.ExecuteNonQuery()
    21. Catch ex As Exception
    22. MessageBox.Show(ex.Message)
    23. Finally
    24. dt.Clear()
    25. da.Fill(dt)
    26. sqlCmd.Connection.Close()
    27. End Try
    28. If neuerDatensatz Then
    29. bs.MoveLast()
    30. Else
    31. bs.Position = posBearbeiten
    32. End If
    33. Catch ex As Exception
    34. MsgBox(ex.ToString)
    35. End Try
    36. End Sub


    hier die fehlermeldung:



    in meiner datenbank befinden sich aktuell 4 datensätze die nun leider alle identisch sind. irgendwo ist ein fehler , wenn ich datensätze aktualisiern will.
    Auf Anhieb würde ich sagen du hast die WHERE Klausel nicht drin, die den Datensatz selektiert, der geändert werden soll. Dafür würde sich die Nutzung einer ID anbieten. in etwa so:

    ​UPDATE ... SET ... WHERE ID=ID-NR
    "Na, wie ist das Wetter bei dir?"
    "Caps Lock."
    "Hä?"
    "Shift ohne Ende!" :thumbsup:
    ich würde dringend davon abraten, so vorzugehen.
    Lerne erstmal Databinding, und lasse die Datenbank erstmal weg, weil das sind zwei Baustellen, und es ist seeehr empfehlenswert, sich in eins nach dem anderen einzuarbeiten.
    Und zwar in Databinding zuerst.
    guck dir dazu vier Views-Videos an - Bindings setzt man nicht im Code, und BindingSources erstellt man nicht im Code - das macht alles der Form-Designer, und das eröffnet jede Menge weiterer Möglichkeiten, die dir verschlossen bleiben, wenn du mit Code-Gemurkel einsteigst.

    Desgleichen mit der Datenbank.
    Hat man erst eine funktionsfähige und logisch korrekte Datenverarbeitung mit Dataset, aber ohne Datenbank, hingebastelt, ist es die zweite Baustelle, die Dataset-Befüllung dann umzustellen von aus Datei auf aus Datenbank.
    Weil mehr ist eine Datenbank nicht: Die schwierigere von zwei Arten, wie man das typDataset befüllen kann.
    Auch das kann man sehr einfach und generisch (d.h.: ein für allemal) lösen - aber nicht, bevor man mit typisierten Dataset und Databinding vernünftig umgehen kann.