Datenabruf mit MySQL Query

  • VB.NET

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

    Datenabruf mit MySQL Query

    Hallo Zusammen,

    folgenden Code benutze ich um auf meinen MySQL Server zu connecten. Für's erste wollte ich nurmal den Namen eines Benutzers auslesen mit dem SELECT Befehl.

    Nur das Problem ist die Verbindung etc. passt alles, ich bekomme niergends einen Fehler, jedoch ist myData.HasRows immer false - egal wie ich den SQL Query schreibe. (mit `, ohne, mit ', ohne)

    Wenn ich den SQL Query mit einem anderen Datenbanktool ausführe, bekomme ich den gewünschten Namen angezeigt.
    Die einzigste Besonderheit wo ich dem Benutzer hinzugefügt hatte, ist das er keine UPDATE, INSERT, DELETE usw. Befehle ausführen kann - sprich der MySQL User besitzt nur "Leserechte".

    Muss ich da noch etwas spezielles beim Connection hinzufügen? Oder gibt es eine extra Funktion wo bei myData = myCommand.ExecuteReader() ausgewählt werden muss?

    VB.NET-Quellcode

    1. Option Explicit On
    2. Option Strict On
    3. Imports MySql.Data.MySqlClient
    4. Public Class Form1
    5. Public Sub GetInformations()
    6. Dim conn As MySqlConnection
    7. conn = New MySqlConnection
    8. '// Verbindungsdaten wurden durch Platzhalter ersetzt!
    9. conn.ConnectionString = "server=serverip;" _
    10. & "port=custom_port;" _
    11. & "user id=benutzername;" _
    12. & "password=passwort;" _
    13. & "database=datenbankname"
    14. Try
    15. conn.Open() ' Verbindung öffnen
    16. Catch myerror As MySqlException
    17. MessageBox.Show("Keine Verbindung zur Datenbank : " & myerror.Message.ToString)
    18. End Try
    19. Dim myAdapter As New MySqlDataAdapter
    20. '// Diverse SQL Query "Schreibweisen" wurden bereits ausprobiert, mit/ohne Quotes.
    21. Dim SQLAbfrage As String = "SELECT name FROM user WHERE id=1"
    22. Dim myCommand As New MySqlCommand
    23. myCommand.Connection = conn
    24. myCommand.CommandText = SQLAbfrage
    25. myAdapter.SelectCommand = myCommand
    26. Dim myData As MySqlDataReader
    27. myData = myCommand.ExecuteReader() ' SQL Abfrage starten
    28. If myData.HasRows Then ' Wenn die Abfrage Einträge enthält / Ergibt jedesmal False, kp wieso...
    29. MessageBox.Show("Da ist was...")
    30. conn.Close()
    31. conn.Open()
    32. Else
    33. MessageBox.Show("Hier gibt es nichts...")
    34. End If
    35. End Sub
    36. End Class


    Die DB besitzt mehrere Tables. Der besagte `user` Table besitzt die Columns `id`, `name`, `mail` - ganz simpel zum testen.

    Gruß, FireEmerald

    Dieser Beitrag wurde bereits 4 mal editiert, zuletzt von „FireEmerald“ ()

    FireEmerald schrieb:

    conn.ConnectionString = "server=serverip;" _
    & "port=custom_port;" _
    & "user id=benutzername;" _
    & "password=passwort;" _
    & "database=datenbankname"

    Du musst server_ip, custom_port, benutzername, passwort, datenbankname schon durch die entsprechenden richtigen Werte ersetzen.
    --
    If Not Program.isWorking Then Code.Debug Else Code.DoNotTouch
    --
    Ließ bitte mal meinen Text durch. Ich hatte geschrieben das die Verbindung zur DB. Ohne Fehler verläuft. Das Problem liegt nur daran, dass ich keinen Ihnalt vom SQL-Query zurückbekomme.

    Achso und ich poste keine Server IP, Port usw. im Forum, es ist ja wohl selbstverständlich das ich das bei mir ersetzt habe. (Facepalm)
    @ErfinderDesRades danke für die Info, aber:

    FireEmerald schrieb:

    ...jedoch ist myData.HasRows immer false - egal wie ich den SQL Query schreibe. (mit `, ohne, mit ', ohne)

    Mit oder ohne Quoten, der SQL Query returned keine Rows und beachtet bitte, wenn ich genau den selben in z.b. MySQL Workbench nutze, bekomme ich Einträge. - Kann mir das einfach nicht erklären wieso?
    Ich gehe bei MySQL immer mit den Ergebnissen direkt in ein DataSet.

    Das sieht dann so aus:

    VB.NET-Quellcode

    1. Dim sql_Tickets As MySql.Data.MySqlClient.MySqlCommand = New MySql.Data.MySqlClient.MySqlCommand(SQLCommand, conn)
    2. Dim ds_Tickets As DataSet = New DataSet()
    3. Dim da_Tickets As MySql.Data.MySqlClient.MySqlDataAdapter = New MySql.Data.MySqlClient.MySqlDataAdapter()
    4. da_Tickets.SelectCommand = sql_Tickets
    5. da_Tickets.Fill(ds_Tickets, "Tickets")
    6. Dim TicketCount As Integer = ds_Tickets.Tables(0).Rows.Count



    Versuch das mal auf deine Anfrage anzupassen.
    Wenn anschließend was im DataSet ankommt, lässt sich damit viel einfacher weiterarbeiten!