MySQL Datensatz in Tabelle einfügen

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

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

    MySQL Datensatz in Tabelle einfügen

    Ich habe eine Frage,

    ich schreibe momentan ein Programm für eine Fahrtenbuchverwaltung und versuche Daten in eine MySQL Tabele hinzuzufügen.
    Doch ich finde den Fehler nicht wie er mir aus den ComboBoxen und den Textboxen die Werte ausliest und in die Tabelle einfügt.

    VB.NET-Quellcode

    1. Private Sub bt_fahren_Click(sender As Object, e As EventArgs) Handles bt_fahren.Click
    2. MySQL = New MySqlConnection
    3. MySQL.ConnectionString = "server=localhost;userid=root;database=vtc_office"
    4. Try
    5. MySQL.Open()
    6. SQL = "INSERT INTO `vtc_office`.`antragsvordaten` (`AGB`, `Fahrer`, `Abfahrt`, `Ankunft`, `Fracht`, `Gewicht`, `schnell`) VALUES (" & lbl_AGB.Text & ", '" & Label5.Text & "', '" & CB_Abfahrt.SelectedItem & " ', '" & CB_Ankunft.SelectedItem & "', '" & CB_Fracht.Text & "', " & tb_Gewicht.Text & ");"
    7. Command.Connection = MySQL
    8. Command.CommandText = SQL
    9. Command.ExecuteNonQuery()
    10. MySQL.Close()
    11. Catch ex As Exception
    12. MessageBox.Show("Ein Fehler ist aufgetreten!")
    13. Finally
    14. MySQL.Dispose()
    15. End Try
    16. End Sub


    vllt kann mir jmd Helfen wie ich den Code ändern muss.
    ich rate dir dringend davon ab, in diesem Stil weiter zu machen.
    Weil was immer du darauf aufbaust wird eine Riesen-Sicherheitslücke generieren: Sql-Injection

    Hingegen gibt es keinen Grund, es nicht von Anfang an richtig zu machen.

    Ich hab allerdings eine recht spezielle Auffassung, wo ich den "Anfang" ansetzen würde. Ich hab stichhaltige Gründe dafür, und die teile ich auch mit - also wenn du dich damit auseinandersetzen willst:
    Datenverarbeitungs-Vorraussetzungen
    Hi Domme94,

    oben istzs mit Paramtern unten ohne.
    Welche Variante Dir lieber ist, sei Dir überlassen .
    Für den Fall, dass es sich um eien Intranet handelt, sehn ich kein muss für die Parameter

    Noch ein Zusatz:
    Deine CBBoxen Anfahrt Abfahrt sind warscg Datefields auch in deiner DB ?
    Musst du nochmal gucken, ob diese Wert so als String durch gehen und nicht konvertiert werden müssen.

    VB.NET-Quellcode

    1. Private Sub btnTest_Click(sender As System.Object, e As System.EventArgs) Handles btnTest.Click
    2. Dim myCmd As MySqlCommand = Nothing
    3. Dim myCnn As MySqlConnection = Nothing
    4. Try
    5. myCnn = New MySqlConnection
    6. myCmd = New MySqlCommand
    7. myCmd.Connection = myCnn
    8. myCnn.ConnectionString = Me.prvStrCnnDBFrance
    9. myCnn.Open()
    10. '///////////////////////////////
    11. ''so siehts aus mit Parameter
    12. ''weiter unten dann ohne
    13. '//////////////////////////////
    14. strSQl = " INSERT INTO tcustomers (CustomerID, CompanyName, PostalCode)" + _
    15. " VALUES (@CustomerID, @CompanyName, @PostalCode);"
    16. myCmd.Parameters.AddWithValue("@CustomerID", 1005)
    17. myCmd.Parameters.AddWithValue("@CompanyName", "myCompany")
    18. myCmd.Parameters.AddWithValue("@PostalCode", 10011)
    19. myCmd.CommandType = CommandType.Text ' ist nicht zwingend, zwingend nur wenn es ein Stored Procedure ist, weil 'CommandType.Text 'ist default. Hat man aber eine grösseres Project mit StoredProcedures und setzt dann 'CommandType.StoredProcedure', vergisst man schnell beim nächsten execute wieder auf '.Text' zu setzen und wundert sich über die ErrorMessage
    20. myCmd.CommandText = strSQl
    21. myCmd.ExecuteNonQuery()
    22. 'Ende mit Parameter--------------
    23. '///////////////////////////////
    24. ''so siehst aus ohne Paramter '
    25. '//////////////////////////////
    26. strSQl = " INSERT INTO tcustomers (CustomerID, CompanyName, PostalCode)" + _
    27. " VALUES (1006, 'Pascale Cartrain', 6009);"
    28. myCmd.CommandType = CommandType.Text
    29. myCmd.CommandText = strSQl
    30. myCmd.ExecuteNonQuery()
    31. ' Ende ohne ------------------
    32. MessageBox.Show("fertig")
    33. Catch ex As MySqlException
    34. myCnn.Close()
    35. MessageBox.Show("" + ex.Message)
    36. Catch ex As Exception
    37. myCnn.Close()
    38. MessageBox.Show("" + ex.Message)
    39. Finally
    40. myCnn.Close()
    41. If TypeOf myCnn Is IDisposable Then
    42. TryCast(myCnn, IDisposable).Dispose()
    43. End If
    44. If TypeOf myCmd Is IDisposable Then
    45. TryCast(myCmd, IDisposable).Dispose()
    46. End If
    47. If Not myCnn Is Nothing Then
    48. myCnn = Nothing
    49. End If
    50. If Not myCmd Is Nothing Then
    51. myCmd = Nothing
    52. End If
    53. End Try
    54. End Sub

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „ebk“ ()

    ebk schrieb:

    Finally
    myCnn.Close()
    If TypeOf myCnn Is IDisposable Then
    TryCast(myCnn, IDisposable).Dispose()
    End If
    If TypeOf myCmd Is IDisposable Then
    TryCast(myCmd, IDisposable).Dispose()
    End If
    If Not myCnn Is Nothing Then
    myCnn = Nothing
    End If
    If Not myCmd Is Nothing Then
    myCmd = Nothing
    End If
    End Try

    Warum lässt du das nicht den Garbage-Collector machen, der eine Zeile später (bei End Sub) sowieso zuschlägt?
    Ok, die Connection closen kannst du ja meinetwegen noch der Ordnung halber, und selbst das wird teilweise doppelt versucht .
    Aber die ganze Disposerei ist meines Erachtens unnötig und macht das Programm nicht übersichtlicher.
    --
    If Not Program.isWorking Then Code.Debug Else Code.DoNotTouch
    --

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „petaod“ ()

    petaod schrieb:

    der eine Zeile später (bei End Sub) sowieso zuschlägt?


    Tut er das? Dannn sag ich danke für den Tipp.
    Soweit ich wiess, weiss man nie wann der GC anfängt.

    myCnn.Close() wird im Fall eines Error 2mal aufgerufen, da hast du recht, mich störts nicht. Wer will kann es verschönern und im Finally-Abschnitt connectionstatus checken.

    Gruss

    Zitat repariert. ~Trade

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Trade“ ()

    ebk schrieb:

    Soweit ich wiess, weiss man nie wann der GC anfängt.
    Streng genommen hast du recht.
    Ich hatte mich ungenau ausgedrückt.
    Aber bei End Sub werden die Ressourcen für den GC freigegeben und sobald Notwendigkeit besteht, räumt dieser sie weg.
    --
    If Not Program.isWorking Then Code.Debug Else Code.DoNotTouch
    --