Auslesen einer Spalte aus Mysql Datenbank und anzeigen in Listbox

  • VB.NET

Es gibt 12 Antworten in diesem Thema. Der letzte Beitrag () ist von yonda.

    Auslesen einer Spalte aus Mysql Datenbank und anzeigen in Listbox

    Hallo, ich hab ein Problem

    ich arbeite an einem Messenger.
    Vb.net 2010 Express + MySql Datenbank

    Problem ist derzeit meine Onlineliste, ich möchte die Daten aus der Spalte "Name" aus der datenbank ip ziehen, und diese in einer Listbox wiedergeben.


    Hier mein Code (Wird über nen Timer abgefragt)

    VB.NET-Quellcode

    1. ListBox1.Items.Clear()
    2. Dim conn As MySqlConnection
    3. 'connect to DB
    4. conn = New MySqlConnection()
    5. conn.ConnectionString = "server=meinsrv; user id=meinusr; password=meinpsw; database=meinedb"
    6. 'see if connection failed.
    7. Try
    8. conn.Open()
    9. Catch myerror As MySqlException
    10. lblstatus.Text = "Error connecting to database"
    11. End Try
    12. 'sql query
    13. Try
    14. Dim myAdapter As New MySqlDataAdapter
    15. 'Dim sqlquery = Txtstring.text
    16. Dim myCommand As New MySqlCommand()
    17. myCommand.Connection = conn
    18. myCommand.CommandText = "SELECT Name FROM ip"
    19. 'start query
    20. myAdapter.SelectCommand = myCommand
    21. reader_ol = myCommand.ExecuteReader()
    22. reader_ol.Read()
    23. Dim onlinelist As String
    24. reader_ol.Close()
    25. Do While reader.Read
    26. ListBox1.Items.Add(reader_ol("Name"))
    27. ListBox1.DisplayMember = "Name"
    28. Loop
    29. reader_ol.Close()
    30. conn.Close()
    31. Catch ex As Exception
    32. conn.Close()
    33. MsgBox(ex.Message)
    34. End Try


    Meine Listbox bleibt leer und es kommt folgende Meldung "Der Objectverweis wurde nicht auf eine bestimmte Objectinstanz festgelegt!"

    Ich hoffe Ihr könnt mir helfen

    Vielen Dank im Vorraus

    Mfg Yonda
    Da Du nicht sagst, wo der Fehler auftaucht, ist es schwer etwas genaues zu sagen.

    Kleiner Tipp: Der Begriff "Name" ist eigentlich für Spaltennamen und Bezeichnungen tabu, da dieser in vielen Umgebungen als Schlüsselwort verwendet wird.
    NB. Es ist doch schön, wenn man lesbare Namen vergibt. Siehe auch [VB.NET] Beispiele für guten und schlechten Code (Stil).

    INOPIAE schrieb:

    Da Du nicht sagst, wo der Fehler auftaucht, ist es schwer etwas genaues zu sagen.

    Kleiner Tipp: Der Begriff "Name" ist eigentlich für Spaltennamen und Bezeichnungen tabu, da dieser in vielen Umgebungen als Schlüsselwort verwendet wird.
    Hab Die Spalte "Name" in "Bname" umbenannt damit es dort keine Probleme gibt

    hier die Meldung aus dem Direktfenster

    bei System.Threading.ThreadHelper.ThreadStart()</ExceptionString><DataItems><Data><Key>Server Error Code</Key><Value>1054</Value></Data></DataItems></Exception></TraceRecord>
    Eine Ausnahme (erste Chance) des Typs "System.NullReferenceException" ist in STCH-CHat V2.exe aufgetreten.

    Hoffe die Fehlermeldung bringt euch bei meinem Problem weiter

    Vielen Dank

    PS: Ja die Db ist auf einem Webserver gelagert. Vorrangig wollte ich den Messenger zum laufen bringen und mich (danach) um das Thema Sicherheit kümmern. ZB. PhP-Skript und Verschlüsselung Ist aber sehr gut das es nochmal ansprichst, heutzutage wird ja echt viel gehackt.
    ok Fehler behoben, hatte den reader.read () nicht in reader_ol.read() umbenannt, er hat einen anderen reader benutzt...

    aber jetzt bekomme ich folgende Meldung:

    Eine Ausnahme (erste Chance) des Typs "System.IndexOutOfRangeException" ist in MySql.Data.dll aufgetreten

    VB.NET-Quellcode

    1. ListBox1.Items.Clear()
    2. Dim conn As MySqlConnection
    3. 'connect to DB
    4. conn = New MySqlConnection()
    5. conn.ConnectionString = "server=meinsrv; user id=meinusr; password=meinpsw; database=meinedb"
    6. 'see if connection failed.
    7. Try
    8. conn.Open()
    9. Catch myerror As MySqlException
    10. lblstatus.Text = "Error connecting to database"
    11. End Try
    12. 'sql query
    13. Try
    14. Dim myAdapter As New MySqlDataAdapter
    15. 'Dim sqlquery = Txtstring.text
    16. Dim myCommand As New MySqlCommand()
    17. myCommand.Connection = conn
    18. myCommand.CommandText = "SELECT Bname FROM ip"
    19. 'start query
    20. myAdapter.SelectCommand = myCommand
    21. reader_ol = myCommand.ExecuteReader()
    22. reader_ol.Read()
    23. Dim onlinelist As String
    24. Do While reader_ol.Read
    25. ListBox1.Items.Add(reader_ol("Name"))
    26. Loop
    27. reader_ol.Close()
    28. conn.Close()
    29. Catch ex As Exception
    30. conn.Close()
    31. MsgBox(ex.Message)
    32. End Try


    Was bedeutet sie? Und wie löse ich das Problem?
    Hat einer ne Idee?
    Na klar

    Eine Ausnahme (erste Chance) des Typs "System.IndexOutOfRangeException" ist in MySql.Data.dll aufgetreten
    war der fehler.
    in diesem Fall wollte reader_ol die Daten aus der Spalte Name entnehmen! Da diese aber nicht existiert, gibt er einen Fehler zurück!
    Richtig war in diesem Fall auch hier Bname zu nutzen und nicht Name!


    hier der Code

    VB.NET-Quellcode

    1. ListBox1.Items.Clear()
    2. Dim conn As MySqlConnection
    3. 'connect to DB
    4. conn = New MySqlConnection()
    5. conn.ConnectionString = "server=meinsrv; user id=meinusr; password=meinpsw; database=meinedb"
    6. 'see if connection failed.
    7. Try
    8. conn.Open()
    9. Catch myerror As MySqlException
    10. lblstatus.Text = "Error connecting to database"
    11. End Try
    12. 'sql query
    13. Try
    14. Dim myAdapter As New MySqlDataAdapter
    15. 'Dim sqlquery = Txtstring.text
    16. Dim myCommand As New MySqlCommand()
    17. myCommand.Connection = conn
    18. myCommand.CommandText = "SELECT Bname FROM ip"
    19. 'start query
    20. myAdapter.SelectCommand = myCommand
    21. reader_ol = myCommand.ExecuteReader()
    22. reader_ol.Read()
    23. Dim onlinelist As String
    24. Do While reader_ol.Read
    25. ListBox1.Items.Add(reader_ol("Bname"))
    26. Loop
    27. reader_ol.Close()
    28. conn.Close()
    29. Catch ex As Exception
    30. conn.Close()
    31. MsgBox(ex.Message)
    32. End Try
    eine weitere Onlineliste, es taucht kein Fehler auf, aber es wird auch kein user angezeigt!



    VB.NET-Quellcode

    1. Try
    2. conn.Open()
    3. Catch myerror As MySqlException
    4. 'lblstatus.Text = "Error connecting to database"
    5. End Try
    6. 'sql query
    7. Try
    8. Dim myAdapter As New MySqlDataAdapter
    9. 'Dim sqlquery = Txtstring.text
    10. Dim myCommand1 As New MySqlCommand()
    11. myCommand1.Connection = conn
    12. Dim wert As Integer = 1
    13. myCommand1.CommandText = "SELECT username FROM reg_status WHERE online= '" & wert & "' "
    14. 'AND kicked = '" & "0" & "' or '" & "NULL" & "'
    15. 'start query
    16. myAdapter.SelectCommand = myCommand1
    17. reader_ol = myCommand1.ExecuteReader()
    18. reader_ol.Read()
    19. 'Dim onlinelist As String
    20. ' onlinelist = reader_ol("Name").ToString
    21. 'reader_ol.Close()
    22. 'ListBox1.Items.Add(onlinelist)
    23. Do While reader_ol.Read
    24. ListBox1.Items.Add(reader_ol("username"))
    25. 'ListBox1.DisplayMember = "Name"
    26. Loop
    27. reader_ol.Close()
    28. Catch ex As Exception
    29. conn.Close()
    30. MsgBox(ex.Message)
    31. End Try
    32. conn.Close()
    33. End Sub


    ich sehe den fehler nicht

    Kann mir jemand helfen?
    is wahrscheinlich net der Fehler, aber warum lässt du den reader 2mal readen :D

    VB.NET-Quellcode

    1. reader_ol.Read()
    2. Do While reader_ol.Read
    3. ListBox1.Items.Add(reader_ol("username"))
    4. Loop
    5. reader_ol.Close()


    so

    VB.NET-Quellcode

    1. Do While reader_ol.Read
    2. ListBox1.Items.Add(reader_ol("username"))
    3. Loop
    4. reader_ol.Close()



    hast du auch in der Db einen Eintrag der "online = '" & wert & "'" hat???

    Chris213 schrieb:

    is wahrscheinlich net der Fehler, aber warum lässt du den reader 2mal readen :D

    VB.NET-Quellcode

    1. reader_ol.Read()
    2. Do While reader_ol.Read
    3. ListBox1.Items.Add(reader_ol("username"))
    4. Loop
    5. reader_ol.Close()


    so

    VB.NET-Quellcode

    1. Do While reader_ol.Read
    2. ListBox1.Items.Add(reader_ol("username"))
    3. Loop
    4. reader_ol.Close()



    hast du auch in der Db einen Eintrag der "online = '" & wert & "'" hat???

    danke scheint wirklich der Fehler gewesen zu sein :) so offensichtlich das er übersehen wird

    Onlineliste funzt jetzt