Versuche Zugriff auf eine Datenbank zu bekommen. Bekomme immer den Fehler "MySqlDataAdapter" ist nicht definiert.

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

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

    Versuche Zugriff auf eine Datenbank zu bekommen. Bekomme immer den Fehler "MySqlDataAdapter" ist nicht definiert.

    Hallo, bekomme MySqlDataAdapter einfach nicht definiert und finde keine andere Lösung meine Daten in ein DataGridView zu importieren. Kann mir wer erklären wie ich das entweder definieren kann oder wie man es anders lösen könnte. MySql.Data.MySqlClient ist bereits Importiert.

    Bin Anfänger und möchte für mich etwas erstellen.

    Danke schonmal

    VB.NET-Quellcode

    1. Private Sub Button5_Click(sender As Object, e As EventArgs) Handles Button5.Click
    2. Dim MysqlConn As MySqlConnection
    3. Dim ContactsCommand As New MySqlCommand
    4. Dim ContactsAdapter As New MySqlDataAdapter
    5. Dim ContactsData As New DataTable
    6. Dim SQL As String
    7. MysqlConn = New MySqlConnection()
    8. ' Define the SQL to grab data from table.
    9. SQL = "SELECT * FROM tbkunden"
    10. 'Connection String
    11. MysqlConn.ConnectionString = "server=localhost;" _
    12. & "user id=root;" _
    13. & "password=;" _
    14. & "database=dbcarby"
    15. ' Try, Catch, Finally
    16. Try
    17. MysqlConn.Open()
    18. ContactsCommand.Connection = MysqlConn
    19. ContactsCommand.CommandText = SQL
    20. ContactsAdapter.SelectCommand = ContactsCommand
    21. ContactsAdapter.Fill(ContactsData)
    22. DataGridView1.DataSource = ContactsData
    23. Catch myerror As MySqlException
    24. MessageBox.Show("Cannot connect to database: " & myerror.Message)
    25. Finally
    26. MysqlConn.Close()
    27. MysqlConn.Dispose()
    28. End Try
    29. End Sub
    @Defskidrow Willkommen im Forum. :thumbup:
    Sind denn die anderen MySql-Klassen definiert?
    Poste mal die ganze Klasse, damit wir sehen können, was Du alles importiert hast.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    @RodFromGermany Danke :)

    Ja, alle anderen sind definiert.

    @ErfinderDesRades Habe den Code erstmal nur so übernommen. Danke für deinen Link! Verstehe definitiv was du meinst. :)

    VB.NET-Quellcode

    1. Imports MySql.Data.MySqlClient
    2. Public Class Carby
    3. Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click
    4. Application.Exit()
    5. End Sub
    6. Private Sub btnLogin_Click(sender As Object, e As EventArgs) Handles btnLogin.Click
    7. Dim MysqlConn As MySqlConnection
    8. MysqlConn = New MySqlConnection()
    9. MysqlConn.ConnectionString = "server=" & txtServer.Text & ";" _
    10. & "user id=" & txtUser.Text & ";" _
    11. & "password=" & txtPassword.Text & ";" _
    12. & "database=test"
    13. Try
    14. MysqlConn.Open()
    15. MessageBox.Show("Connection to Database has been opened.")
    16. MysqlConn.Close()
    17. Catch myError As Exception
    18. MessageBox.Show("Cannot connect to database: " & myError.Message)
    19. Finally
    20. MysqlConn.Dispose()
    21. End Try
    22. End Sub
    23. Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    24. System.Diagnostics.Process.Start("http://localhost/phpmyadmin/index.php")
    25. End Sub
    26. Private Sub Button3_Click(sender As Object, e As EventArgs) Handles Button3.Click
    27. 'DataGridView befüllen
    28. DataGridView1.Rows.Add("Spalte 1", "Spalte 2")
    29. End Sub
    30. Private Sub Button4_Click(sender As Object, e As EventArgs) Handles Button4.Click
    31. Form2.Show() 'Kunden anlegen öffnen
    32. End Sub
    33. Private Sub Button5_Click(sender As Object, e As EventArgs) Handles Button5.Click
    34. Dim MysqlConn As MySqlConnection
    35. Dim ContactsCommand As New MySqlCommand
    36. Dim ContactsAdapter As New MySqlDataAdapter
    37. Dim ContactsData As New DataTable
    38. Dim SQL As String
    39. MysqlConn = New MySqlConnection()
    40. ' Define the SQL to grab data from table.
    41. SQL = "SELECT * FROM tbkunden"
    42. 'Connection String
    43. MysqlConn.ConnectionString = "server=localhost;" _
    44. & "user id=root;" _
    45. & "password=;" _
    46. & "database=dbcarby"
    47. ' Try, Catch, Finally
    48. Try
    49. MysqlConn.Open()
    50. ContactsCommand.Connection = MysqlConn
    51. ContactsCommand.CommandText = SQL
    52. ContactsAdapter.SelectCommand = ContactsCommand
    53. ContactsAdapter.Fill(ContactsData)
    54. DataGridView1.DataSource = ContactsData
    55. Catch myerror As MySqlException
    56. MessageBox.Show("Cannot connect to database: " & myerror.Message)
    57. Finally
    58. MysqlConn.Close()
    59. MysqlConn.Dispose()
    60. End Try
    61. End Sub
    62. End Class

    Defskidrow schrieb:

    Danke für deinen Link! Verstehe definitiv was du meinst.
    Dassis erfreulich.
    Nur warum scherts dich einen Dreck? Dein Code hat sich daraufhin ja keinen Deut geändert.
    Und warum beantwortest du nicht die Frage, die ich frug?



    Defskidrow schrieb:

    Habe den Code erstmal nur so übernommen.
    Da hab ich eine Empfehlung für dich: Schmeiss das alles weg.
    Irgendwo rauskopierter Code ohne den Kontext, in dem das funktioniert hat, funktioniert nicht.
    Ausserdem halte ich von der Vorgehensweise nichts.
    Wenn einer noch nie von Databinding, typisiertem Dataset, Datenmodellierung gehört hat, dann soller besser keine Datenbank-Zugriffe unternehmen - das führt in eine Sackgasse, bei der einem nach ca. 1 Jahr aufgeht, dasses eine Sackgasse ist, und nochmal von vorn anfangen.

    Hier kannst du eine lauffähige Datenverarbeitung runterladen, also bekommst den Code in seim Context: Daten laden und speichern
    Nicht traurig sein, dasses ohne Datenbank ist: Die kann man jederzeit nachträglich hinterlegen, wenn nötig. (Und wenn nicht nötig, sollte man auch tunlichst Abstand davon nehmen.)

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

    ErfinderDesRades schrieb:

    Fehlerzeile?

    Übrigens den Trycatch tät ich erstmal rauswerfen. In diesem Stadium der Entwicklung hoffnungslos verfrüht.
    Es bring nix, sich die Fehler-Debug-Unterstützung selbst wegzufangen, und durch eine lumpige Messagebox ersetzen zu wollen.

    TryCatch ist ein heißes Eisen

    Es gibt nur den einen Fehler. Zeile 45, das "MySqlDataAdapter" nicht defniert ist. Ich habe lediglich direkt die Klasse gepostet, wie es gewünscht war.
    @Defskidrow Welche Verweise hast Du Deinem Projekt hinzugefügt (MySQL.Data.dll)?
    Welche Framework-Version nutzt Du (bitte in den Thread-Titel eintragen)?
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Hi,
    deklariere mal deine Variablen ohne das New Also Dim ContactsAdapter As MySqlDataAdapter

    Noch besser wäre, Du erstellst Dir eine Klasse, die Dir hilft, eine Verbindung zum MySqlServer aufzubauen und die Du öfter benutzen kannst, auch in anderen Projekten.

    Ich nutze meist folgende Klasse in kleineren Projekten:
    Spoiler anzeigen

    VB.NET-Quellcode

    1. Imports MySql.Data.MySqlClient
    2. Public Class DBConnection
    3. Private _ConString As String
    4. Public Sub New(server As String, user As String, pw As String, db As String)
    5. _ConString = GenerateConnectionString(server, user, pw, db)
    6. End Sub
    7. Public Sub InitDBAccess(query As String, param As Dictionary(Of String, Object), dt As DataTable)
    8. Using con As New MySqlConnection(_ConString)
    9. Using adap As New MySqlDataAdapter(query, con)
    10. FillParams(adap.SelectCommand, param)
    11. dt.Clear()
    12. adap.Fill(dt)
    13. End Using
    14. End Using
    15. End Sub
    16. Private Function GenerateConnectionString(server As String, user As String, pw As String, db As String) As String
    17. Dim conStringBuilder As New MySqlConnectionStringBuilder()
    18. conStringBuilder.Server = server
    19. conStringBuilder.UserID = user
    20. conStringBuilder.Password = pw
    21. conStringBuilder.Database = db
    22. Return conStringBuilder.ToString()
    23. End Function
    24. Private Sub FillParams(cmd As MySqlCommand, param As Dictionary(Of String, Object))
    25. If param Is Nothing Then
    26. Return
    27. End If
    28. For Each keyvalue In param
    29. cmd.Parameters.AddWithValue(keyvalue.Key, keyvalue.Value)
    30. Next
    31. End Sub
    32. End Class


    In größeren Projekten, nutze ich auch gerne die Helpers Klasse von @ErfinderDesRades

    Wenn Du die Klasse hast, kannst Du in deiner Form oder Button oder wo auch immer so daurauf zugreifen:

    VB.NET-Quellcode

    1. Private con As New DBConnection("ServerIP", "username", "password", "database")
    2. Public Sub FillDataTable(dt As DataTable, param As Dictionary(Of String, Object))
    3. Dim query As String = "SELECT *FROM `DeineTabelle WHERE `DatumUhrzeit` >@Param1"
    4. con.InitDBAccess(query, param, dt)
    5. End Sub

    "Hier könnte Ihre Werbung stehen..."
    @Defskidrow möglicherweise ist MySqlDataAdapter in einem anderen Namespace.
    Such das mal gezielt in der MSDN.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!

    Defskidrow schrieb:

    Wenn ich den Namespace hinzufüge, wird es auch erkannt und grün dargestellt, aber es passiert nichts.


    welchen Namespace? und WAS passiert nicht?
    Schau Dir nochmal die Klasse DBConnection an und schaue, wie es dort gehandelt wird.
    Ich denke Du hast noch etwas Probleme zwischen Klassen, Funktionen und Datentypen zu unterscheiden...

    btw. ich hab deinen Code von oben mal in ein neues Projekt kopiert, hab nen Verweis auf MySql.Data hinzugefügt, hab den Imports MySql.Data.MySqlClient hinzugefügt und schwubs... alle relevanten Datentypen sind grün!


    Vielleicht doch ein Schreibfehler??
    "Hier könnte Ihre Werbung stehen..."

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

    und jetzt empfehle ich dir nocheinmal, an dieser Baustelle erstmal nicht weiterzumachen.
    Lerne erstmal, wie man ein Datenmodell konzipiert und umsetzt, und lerne Databinding.
    Weil bevor du Datenstrukturen nicht sinnvoll konzipieren kannst, und bevor du nicht weißt, wie genial das Instrumentarium zur Datenverarbeitung ist (wenn mans richtig anfängt) - vorher solltest du nicht anfangen, iwelches Zeug von Datenbanken zu holen, was keinen Sinn ergibt, und was du nicht in angemessener Weise verarbeiten kannst.
    Sonst wirst du's nämlich in sinnloser, unangemessener Weise verarbeiten, und weil nie richtig gelernt, wirstes nichtmal merken, wie umständlich deine Versuche sind.

    Siehe post#5