iten mit MySqlConnector und DataAdapter

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

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

    iten mit MySqlConnector und DataAdapter

    Hi Leute
    ICh habe eine Datagridview. Diese ist über ein Dataset gekoppelt. Das Dataset mit einem DataTableadapter aus dem MySqlConnector.

    Mein Problem ist zb. das ich beim Insert eine Benutzerid einfügen möchte. Jedoch komme ich nicht so recht klar damit.

    Ich möchte die Anweisungen Insert, DElete usw so anpassen das diese BenutzerID, sofern erforderlich, durch eine eigene Zahl ersetzt wird.

    Die Software greift auf eine MySqlDatenbank zu und Liest meine Kategorien. Diese Kategorien sind Benutzerabhängig.

    Mein Aktueller Code ist folgender.

    VB.NET-Quellcode

    1. ​Imports MySql.Data.MySqlClient
    2. Public Class categories
    3. Dim conn As New MySqlConnection("server=5.45.104.51;uid=USER;pwd=PASSWORT;database=DATENBANK;")
    4. Public Manager As New Account_Manager.PHP("http://5.45.104.51/html/Account_Manager/")
    5. Dim Adapter_Categories As MySqlDataAdapter
    6. Dim DataSet_Categories As New DataSet
    7. Dim CommandBu As MySqlCommandBuilder
    8. #Region "Aktionen"
    9. Sub Read_Categories()
    10. DataGridView1.Rows.Clear()
    11. Dim cmd As New MySqlCommand("SELECT * FROM categories WHERE UserID = '" & Manager.ReadUser("USERID") & "'", conn)
    12. Dim reader As MySqlDataReader = cmd.ExecuteReader()
    13. While (reader.Read())
    14. Dim NewRow As Integer = DataGridView1.Rows.Add()
    15. With DataGridView1.Rows(NewRow)
    16. .Cells("Id_").Value = reader("Id")
    17. .Cells("Description_").Value = reader("Description")
    18. End With
    19. End While
    20. reader.Close()
    21. End Sub
    22. #End Region
    23. Private Sub categories_Load(sender As Object, e As EventArgs) Handles MyBase.Load
    24. Manager.Login()
    25. MessageBox.Show(Manager.ReadUser("USERID"))
    26. conn.Open()
    27. Dim Command_Select As New MySqlCommand("SELECT * FROM Categories WHERE UserID = @UserID", conn)
    28. Dim Command_Insert As New MySqlCommand("INSERT INTO Categories (UserID, Description) VALUES (@UserID, @Description)", conn)
    29. Dim Command_Delete As New MySqlCommand("DELETE * FROM Categories WHERE Id = @Id", conn)
    30. Adapter_Categories = New MySqlDataAdapter
    31. CommandBu = New MySqlCommandBuilder(Adapter_Categories)
    32. Adapter_Categories.SelectCommand = Command_Select
    33. Adapter_Categories.DeleteCommand = Command_Delete
    34. Adapter_Categories.InsertCommand = Command_Insert
    35. Adapter_Categories.UpdateCommand = CommandBu.GetUpdateCommand
    36. Dim P1 As MySqlParameter = Adapter_Categories.SelectCommand.Parameters.Add("@UserID", MySqlDbType.Int16)
    37. P1.Value = Manager.ReadUser("USERID")
    38. Dim P2 As MySqlParameter = Adapter_Categories.InsertCommand.Parameters.Add("@UserID", MySqlDbType.Int16)
    39. P2.Value = Manager.ReadUser("USERID")
    40. Dim P3 As MySqlParameter = Adapter_Categories.InsertCommand.Parameters.Add("@Description", MySqlDbType.Text)
    41. P3.SourceColumn = "Description"
    42. Dim P4 As MySqlParameter = Adapter_Categories.DeleteCommand.Parameters.Add("@Id", MySqlDbType.Text)
    43. P4.SourceColumn = "Id"
    44. Adapter_Categories.Fill(DataSet_Categories, "Categories")
    45. DataGridView1.DataSource = DataSet_Categories.Tables("Categories")
    46. DataGridView1.Columns("Id").Visible = False
    47. DataGridView1.Columns("UserID").Visible = False
    48. End Sub
    49. Private Sub categories_FormClosing(sender As Object, e As System.Windows.Forms.FormClosingEventArgs) Handles MyBase.FormClosing
    50. conn.Close()
    51. Adapter_Categories.Update(DataSet_Categories, "Categories")
    52. End Sub
    53. End Class


    Ich würde gerne so auch weiter arbeiten weil es wesendlich einfacher ist Komplexe Systeme damit zu erstellen
    IDs werden doch üblicherweise von der DB bzw. vom SQL-Server (oder was auch immer im Einsatz ist) selbst vergeben. Oder verstehe ich deine Frage falsch?
    "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
    Hm, ich musste bisher nie IDs, gleich welche Namen sie trugen, manuell vergeben. Normalerweise speichert man einen neuen Datensatz in eine DB. Dann vergibt die DB die neue ID.

    Wenn du selbst eine ID vergeben willst, warum auch immer, verstehe ich nicht was dich daran hindert.
    "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

    mrMo schrieb:

    Dann vergibt die DB die neue ID.

    das stimmt schon, jedoch wird hier nicht vom PK geredet, sondern von einer Spalte mit dem Namen BenutzerID.

    Die PK-ID die du meinst wird vergeben (siehe Delete-Statement, da greift er auf den PK zu).

    Was genau das Problem ist, bzw. an welcher Stelle im Code etwas auftritt, verstehe ich auch nicht so ganz.
    Wenn das Leben wirklich nur aus Nullen und Einsen besteht, dann laufen sicherlich genügen Nullen frei herum. :D
    Signature-Move 8o
    kein Problem mit privaten Konversationen zu Thema XY :thumbup:

    tomtombusiness schrieb:

    Ich möchte die Anweisungen Insert, DElete usw so anpassen das diese BenutzerID, sofern erforderlich, durch eine eigene Zahl ersetzt wird.
    Dann musst du diese "eigene Zahl" eben in alle DataRows eintragen, die zu inserten sind.
    Evtl. kannst du auch einfach bereits zum StartUp den DataColumn.DefaultValue auf deine "eigene Zahl" setzen - wenn dann der User einen neuen Datensatz anlegt, ist die eigene Zahl der DefaultValue.