MYSQL - "Too many connections"

  • VB.NET

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

    MYSQL - "Too many connections"

    Hallo,

    ich möchte in meiner MySql Datenbank eine Abfrage ausführen, die mir als Ergebnis mehrere Ergebnisse liefert. Sie sieht wie folgt aus:

    VB.NET-Quellcode

    1. Private Sub execute()
    2. Using cn As New MySqlConnection(ServerString)
    3. Dim query As String = "SELECT faction FROM character_reputation WHERE guid='1'"
    4. Using cmd As New MySqlCommand(query, cn)
    5. Try
    6. cn.Open()
    7. Catch ex As Exception
    8. MsgBox(ex.ToString)
    9. End Try
    10. Dim reader As MySqlDataReader = cmd.ExecuteReader
    11. Dim IdList As New List(Of Integer)
    12. Do While reader.Read
    13. count += 1
    14. Dim faction As String = (reader("faction"))
    15. Dim standing As String = runcommand("SELECT standing FROM character_reputation WHERE faction='" & faction & "' AND guid='1'", "standing")
    16. Dim flags As String = runcommand("SELECT flags FROM character_reputation WHERE faction='" & faction & "' AND guid='1'", "flags")
    17. Loop
    18. MsgBox(count.ToString)
    19. End Using
    20. End Using
    21. End Sub
    22. Private Function runcommand(ByVal command As String, ByVal spalte As String)
    23. Dim conn As MySqlConnection
    24. 'connect to DB
    25. conn = New MySqlConnection()
    26. conn.ConnectionString = ServerString
    27. 'see if connection failed.
    28. Try
    29. conn.Open()
    30. Catch myerror As MySqlException
    31. End Try
    32. 'sql query
    33. Try
    34. Dim myAdapter As New MySqlDataAdapter
    35. 'Dim sqlquery = Txtstring.text
    36. Dim myCommand As New MySqlCommand()
    37. Dim reader_ol
    38. myCommand.Connection = conn
    39. myCommand.CommandText = command
    40. 'start query
    41. myAdapter.SelectCommand = myCommand
    42. reader_ol = myCommand.ExecuteReader()
    43. reader_ol.Read()
    44. Return reader_ol(spalte)
    45. reader_ol.Close()
    46. conn.Close()
    47. Catch ex As Exception
    48. conn.Close()
    49. MsgBox(count.ToString & ex.Message)
    50. End Try
    51. End Function


    Allerdings erhalte ich bei count=44 einen Fehler. "myerror" ist dabei: "Too many Connections"

    Was mache ich falsch, bzw. welchen anderen Weg gibt es mehrere Ergebnisse, die auf einen Select Befehl ansprigen zu bekommen?

    mfg
    bastel dir ein typisiertes Dataset. Dabei-generiert bekommst du auch geeignete TableAdapter.

    Diese müssteste um eine zusätzliche, parametrisierte Query erweitern, und in richtiger Reihenfolge abfahren.

    Also zunächstmal einen Alles-Lader basteln, die parametrisierte Query kriegt man da später noch dran.

    Ach- MySql - da muß man den richtigen Connector zu runterladen, dass man sich Datasetse generieren kann, wie in "Datenbank in 10 Minuten" auf Movie-Tuts für Access vorgeführt.

    Oder halt die Generiererei auslassen, und gleich mit DBExtensions einsteigen.

    Da darf man aber keine Angst vor Extension-Methods haben.
    in der tabelle mysql.users ist glaube ich eine spalte "max_connections"
    mach mal..

    SQL-Abfrage

    1. use mysql;
    2. update user set max_connections = '10000' where name = 'root'; --oder so.. kp mehr


    dann

    FLUSH PRIVILEGES;



    #edit
    is das scheisse :D
    baust für jeden query eine neue connection auf.
    @supreme
    Ich möchte ungerne derartige Änderungen an der Datenbank vornehmen, vorallem, weil die Endverbraucher die bestehenden Einstellungen beibehalten wollen.

    Gibt es keine Möglichkeit die gesamte Tabelle vielleicht erstmal temporär zu laden und dann Querys auszuführen?
    Das Problem ist halt, dass auf den Select Befehl sehr viele Ergebnisse reagieren.
    was bedeutet "temporär laden"?

    Also man lädt oder nicht.
    Und das Laden der ganzen Tabelle ist kein problem, und das laden aller untergeordneten Datensätze ebenfalls nicht.
    Aber sieh erstmal zu, dass du ühaupt mit einem DataAdapter mal eine Tabelle geladen kriegst (post#3).

    ErfinderDesRades schrieb:

    was bedeutet "temporär laden"?

    Also man lädt oder nicht.
    Und das Laden der ganzen Tabelle ist kein problem, und das laden aller untergeordneten Datensätze ebenfalls nicht.
    Aber sieh erstmal zu, dass du ühaupt mit einem DataAdapter mal eine Tabelle geladen kriegst (post#3).


    Mit "temporär laden" meinte ich, dass man die Tabelle erstmal offline speichert (bzw. einliest). Jetzt muss man ja keine Connection mehr aufbauen wenn man Querys ausführen will. Aber wenn das, wie du schreibst, mit einem DataAdapter geht, dann ist es ja das was ich suche. Ich bin noch relativ unerfahren auf dem Gebiet der Datenbanken, weshalb ich auch nicht weiss, wie genau man das anstellen müsste. Wäre sehr dankbar, wenn jemand mal beispielhaft demonstriert, wie man so etwas machen kann. Bei Google findet man zum Thema MYSQL in Verbindung mit vb.net oftmals nicht das was man sucht.

    mfg
    Tja, wenndedich einfach mal mit den gegebenen Links auseinandersetzen tätest.

    Ist natürlich alles nicht MySql, denn ich kann kein Sample uploaden, wo eine MySql-Db mit drinne ist. Wohl aber Access, SqlServer, SqlServerCe, SQLite oder halt DatasetOnly.
    Sogar MySql ist dabei, aber nicht lauffähig, weil der Besitzer dieser Online-Datenbank fände das vmtl. nicht lustig.