NULL-Fehler beim Auslesen einer MySQL Tabelle trotz definitiv gefüllter Variable

  • VB.NET
  • .NET (FX) 4.0

Es gibt 10 Antworten in diesem Thema. Der letzte Beitrag () ist von KoenigRollo.

    NULL-Fehler beim Auslesen einer MySQL Tabelle trotz definitiv gefüllter Variable

    Hey,
    ich wende mich nachdem ich hier nach viel Suche keine Lösung für mein Problem gefunden habemal an euch.
    Ich möchte eine MySQL-Tabelle auslesen und die Daten, die ich gewinne in eine neue Zeile in einer DataTable schreiben.
    EDIT: Ich möchte natürlich jede neue Zeile, die ausgelesen wird in eine seperate Zeile in der DataTable schreiben ;)


    Code:

    VB.NET-Quellcode

    1. Dim id As New Integer
    2. id = 1
    3. Dim cmd As String
    4. cmd = "SELECT * FROM fhz WHERE id = '" & id & "'"
    5. Dim rdr As MySqlClient.MySqlDataReader
    6. rdr = Class1.dbopenrecordset(cmd).ExecuteReader '<-------------- Hier soll der Fehler sein'
    7. While rdr.Read()
    8. FhzTable.Rows.Add(rdr)
    9. id += 1
    10. End While
    11. rdr.Close()
    12. connection.Close()


    Hier einmal die Funktion dbopenrecordset

    VB.NET-Quellcode

    1. Public Shared Function dbopenrecordset(ByVal cmd As String) As MySql.Data.MySqlClient.MySqlCommand
    2. Dim connectionstring As String = "server=SERVERIP;user=USERNAME;database=DATENBANKNAME;port=PORT;password=PASSWORT;"
    3. Dim connection As New MySql.Data.MySqlClient.MySqlConnection(connectionstring)
    4. Dim command As New MySql.Data.MySqlClient.MySqlCommand(cmd, connection)
    5. connection.Open()
    6. command.BeginExecuteReader()
    7. Return command
    8. connection.Close()
    9. End Function


    Und hier die Fehlermeldung:
    Ein Ausnahmefehler des Typs "System.ArgumentNullException" ist in mscorlib.dll aufgetreten.

    Zusätzliche Informationen: Der Wert darf nicht NULL sein.

    EDIT_2: Die Funktion ist fehlerfrei, in einer anderen Abfrage nach einem einzelnen Wert funktioniert sie.


    Ich hoffe mal ihr könnt mir weiterhelfen und Danke schon mal im Voraus ;)
    Gruß Jonny

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

    In Zeile 4 machst du aus deiner ID, die wohl Integer ist, einen String:
    cmd = "SELECT * FROM fhz WHERE id = '" & id & "'"

    So wärs vielleicht richtig:
    cmd = "SELECT * FROM fhz WHERE id = " & id

    Ich bin mir nicht ganz sicher ob das notwendig ist aber ich würde noch ein Semikolon anflanschen
    cmd = "SELECT * FROM fhz WHERE id = " & id & ";"
    Ich glaube eher nicht, das es an der Zeile selber liegt, da ich, wenn ich die While-Schleife durch eine If-Abfrage ersetzte bekomme ich zwar nur ein Ergebnis, aber es geht. Ich denke eher, das das Problem darin liegt, das der letzte Datensatz, der Inhalt hat, die Schleife nicht beendet und danach noch weiter aus der MySQL Tabelle ausgelesen wird und die Ergebnisse da dann NULL sind, da ja logischerweise keine Werte dafür vorhanden sind, also das Problem darin liegt, das ich einen Eintrag mit einer ID suche, den es nicht gibt und das Ergebnis dann NULL ist.
    Der Fehler liegt wahrscheinlich wie gesagt nicht in der Zeile selbst, sondern es wird eine Zeile, die was damit zu tun hat als Fehler angegeben. Das Problem konnte ich inzwischen genau darauf festmachen, das der Reader nicht nach Vollendung des letzten Eintrags beendet wird, sondern dann versucht einen Eintrag mit einer ID zu finden, den es nicht mehr gibt, result ist NULL und somit ein Fehler.

    Xyolyp schrieb:

    "SELECT * FROM fhz WHERE id = '" & id & "'"
    Wird bei eindeutiger ID keinen oder einen Datensatz zurück geben.
    Da kannst du loopen solgane du willst.

    Xyolyp schrieb:

    While rdr.Read()
    FhzTable.Rows.Add(rdr)
    id += 1
    End While
    Die ID zu erhöhen bringt rein gar nichts. Die Variable id wird hinterher nie wieder ausgewertet.
    --
    If Not Program.isWorking Then Code.Debug Else Code.DoNotTouch
    --

    VB.NET-Quellcode

    VB.NET-Quellcode

    1. Dim id As New Integer
    2. id = 1
    3. Dim cmd As String
    4. cmd = "SELECT * FROM fhz WHERE id = '" & id & "'"
    5. Dim rdr As MySqlClient.MySqlDataReader
    6. rdr = Class1.dbopenrecordset(cmd).ExecuteReader '<-------------- da müssen doch noch Klammern hin: .ExecuteReader() , ist doch eine Methode.'
    7. While rdr.Read()
    8. FhzTable.Rows.Add(rdr)
    9. id += 1
    10. End While
    11. rdr.Close()
    12. connection.Close()