Mehrere Datenbanksätze nacheinander Updaten

  • VB.NET
  • .NET 4.5

SSL ist deaktiviert! Aktivieren Sie SSL für diese Sitzung, um eine sichere Verbindung herzustellen.

Es gibt 12 Antworten in diesem Thema. Der letzte Beitrag () ist von petaod.

    Mehrere Datenbanksätze nacheinander Updaten

    Hi,

    ich habe 3 Textboxen mit Pfaden. Jetzt möchte ich alle 3 Werte in der Datenbank nacheinander updaten ohne jedesmal die connection wieder zu schließen und neu zu öffnen.

    Hier mal der Code wie ich ihn bis jetzt habe

    VB.NET-Quellcode

    1. Private Sub btn_speichern_Click(sender As Object, e As EventArgs) Handles btn_speichern.Click
    2. con.ConnectionString =
    3. "Provider=Microsoft.ACE.OLEDB.12.0;" &
    4. "Data Source=" & str_pfad_config
    5. cmd.Connection = con
    6. cmd.CommandText =
    7. "UPDATE tb_config SET Wert='" & tb_pfad_server_x.Text & "' WHERE Typ='Pfad_Server_X'" &
    8. "UPDATE tb_config SET Wert='" & tb_pfad_server_x.Text & "' WHERE Typ='Pfad_Server_Save';"
    9. '...
    10. Try
    11. con.Open()
    12. cmd.ExecuteNonQuery()
    13. con.Close()
    14. Catch ex As Exception
    15. MessageBox.Show(ex.Message)
    16. con.Close()
    17. End Try
    18. End Sub


    Jetzt kommt hier eine Fehlermeldung der DB Zeichen am ende gefunde etc

    Kann mit einer sagen wie ich mehrere Updates hintereinander ausführen kann? Google sag mir leider keine Lösung ?(
    Update:
    Habe es notgedrungen vorläufig so gelöst:

    VB.NET-Quellcode

    1. Private Sub btn_speichern_Click(sender As Object, e As EventArgs) Handles btn_speichern.Click
    2. con.ConnectionString =
    3. "Provider=Microsoft.ACE.OLEDB.12.0;" &
    4. "Data Source=" & str_pfad_config
    5. cmd.Connection = con
    6. cmd.CommandText =
    7. "UPDATE tb_config SET Wert='" & tb_pfad_server_x.Text & "' WHERE Typ='Pfad_Server_X'"
    8. Try
    9. con.Open()
    10. cmd.ExecuteNonQuery()
    11. con.Close()
    12. Catch ex As Exception
    13. MessageBox.Show(ex.Message)
    14. con.Close()
    15. End Try
    16. cmd.CommandText =
    17. "UPDATE tb_config SET Wert='" & tb_pfad_save.Text & "' WHERE Typ='Pfad_Server_Save'"
    18. Try
    19. con.Open()
    20. cmd.ExecuteNonQuery()
    21. con.Close()
    22. Catch ex As Exception
    23. MessageBox.Show(ex.Message)
    24. con.Close()
    25. End Try
    26. cmd.CommandText =
    27. "UPDATE tb_config SET Wert='" & tb_pfad_vpe.Text & "' WHERE Typ='Pfad_VPE'"
    28. Try
    29. con.Open()
    30. cmd.ExecuteNonQuery()
    31. con.Close()
    32. Catch ex As Exception
    33. MessageBox.Show(ex.Message)
    34. con.Close()
    35. End Try
    36. cmd.CommandText =
    37. "UPDATE tb_config SET Wert='" & tb_dollar.Text & "' WHERE Typ='Dollar'"
    38. Try
    39. con.Open()
    40. cmd.ExecuteNonQuery()
    41. con.Close()
    42. Catch ex As Exception
    43. MessageBox.Show(ex.Message)
    44. con.Close()
    45. End Try
    46. End Sub


    Aber es muss doch eine einfachere Methode geben?? Kann mir da wirklich keiner von euch helfen?? :saint:
    Du schreibst ja alles in die selbe Tabelle. Wär mal interessant die Struktur deiner Tabelle zu kennen. Mir scheint, du hast da nen Designfehler in deiner Logik. Zudem würde ich gerne wissen, was dein Programm im Allgemeinen macht.

    Dieses ganze SQL zeug hat in der GUI nix zu suchen. Du darfst Code gerne mehr als einmal verwenden. Dafür muss der aber in eigene Methoden/Klassen ausgelagert werden.
    "Gib einem Mann einen Fisch und du ernährst ihn für einen Tag. Lehre einen Mann zu fischen und du ernährst ihn für sein Leben."

    Wie debugge ich richtig? => Debuggen, Fehler finden und beseitigen
    Wie man VisualStudio nutzt? => VisualStudio richtig nutzen
    Also der Teil des Programms soll Pfade in die Datenbank laden und speichern

    Die Tabelle tb_config ist wie folgt aufgebaut

    ID
    Typ
    Wert
    1
    Pfad_Server_X
    C:\
    2
    Pfad_Server_Save
    C:\
    3
    Pfad_VPE
    C:\
    4
    Dollar
    1,05

    Jetzt möchte ich ganz gerne diese Werte über mein Programm Updaten

    Kannst du mir ein Beispiel zeigen wie das mit der Methode/Klasse aussieht?
    Hi vielen Dank für deine Antwort-

    Bin selber kein Freund vom DGV
    Es hat aber noch andere Gründe warum ich das mit der Access Datenbank beherrschen möchte.
    Bei uns in der Firma sind bereits Serverseitige DB vorhanden auf die ich in Zukunft zugreifen möchte.
    Bin relativ neu im Bereich DB unterwegs und nutze solche kleinen Projekte um dazu zu lernen.

    Kann man den bei SQL nicht in einem commandtext mehrere SQL Befehle gleichzeitig übertragen oder so übertragen das die DB die nacheinander abarbeitet?
    So könnte ne separate Methode für den sql kram aussehen ;)

    Private Sub StatementAbsetzen(sSql As String)

    ' do sql stuff

    End Sub
    "Gib einem Mann einen Fisch und du ernährst ihn für einen Tag. Lehre einen Mann zu fischen und du ernährst ihn für sein Leben."

    Wie debugge ich richtig? => Debuggen, Fehler finden und beseitigen
    Wie man VisualStudio nutzt? => VisualStudio richtig nutzen
    :thumbup: Stimmt. Brett vorm Kopf gehabt 8|

    So müsste ich nur beim button_click event 5x den Sub aufrufen mit entsprechenden Var für jeden Wert in der DB und wäre fertig.

    Den Sub lager ich einfach in ein Modul aus.

    Aber mehrere SQL Befehle gleichzeitig an die DB senden das diese die nacheinander abarbeitet ist nicht möglich?
    Kann schon sein das sowas geht, hab ich aber noch nie gemacht bzw. gebraucht.
    "Gib einem Mann einen Fisch und du ernährst ihn für einen Tag. Lehre einen Mann zu fischen und du ernährst ihn für sein Leben."

    Wie debugge ich richtig? => Debuggen, Fehler finden und beseitigen
    Wie man VisualStudio nutzt? => VisualStudio richtig nutzen
    Das mit dem Semikolon ist richtig.
    Du musst aber auch nicht jedesmal die Verbindung wieder schliessen.
    Lass die Verbindung auf und erzeuge für jeden sql-Befehl nur ein neuen Command-Objekt,
    dem du mitteilst, welche (bereits offene) Verbindung genutzt werden soll.

    Ich bin mir jetzt nicht sicher, ob man evtl. sogar das Command-Objekt wiederverwenden kann (einfach mal versuchen !)