Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Anzahl der MySQL-Verbindungspools

Es gibt mehrere Dinge in Ihrem Code.

  • Aktivieren Sie zuerst Option Strict . Die Funktion ist so deklariert, dass sie einen String zurückgibt, aber Sie versuchen, Object zurückzugeben mit Return result
  • Alles die ein Dispose implementiert -Methode sollte innerhalb eines Using verwendet werden Block. Dadurch können Sie ein Objekt deklarieren und initialisieren, verwenden und am Ende entsorgen.
  • Parameters.Add ist besser als AddWithValue . Letzteres zwingt den DB-Provider dazu, den Datentyp anhand der Daten zu erraten.
  • Abhängig von der Auslastung und davon, ob diese Methode häufig verwendet wird, könnten Sie die Daten in eine DataTable laden und suchen Sie danach, anstatt die Datenbank immer wieder abzufragen.

Das Kernproblem ist (wahrscheinlich), dass Sie nicht über den DBCommand verfügen Objekt. Sehen Sie sich den Konstruktor an, den Sie verwenden:

Dim cmdx As New MySqlCommand(cmdTextx, connx)

Der DBCommand Objekt wird eine Referenz auf die Verbindung übergeben. Auch wenn Sie explizit auf die Verbindung verzichten, cmdx hat immer noch einen Verweis darauf, und it wurde nicht entsorgt. Using -Blöcke machen es einfach, sicherzustellen, dass Dinge entsorgt werden:

Dim sql = "Select `Cert` From `Courses` WHERE `ID`[email protected]"

Using dbCon As New MySqlConnection(MySQLConnStr)
    Using cmd As New MySqlCommand(sql, dbCon)
        cmd.Parameters.Add("@Id", MySqlDbType.Int32).Value = CourseTypeID
        dbCon.Open()
        Dim result = cmd.ExecuteScalar

        If result Is Nothing OrElse result Is DBNull.Value Then
            Return String.Empty
        Else
            Return result.ToString()
        End If
    End Using           ' close, dispose of conn
End Using               ' dispose of DBCommand

Um die Einrückung zu reduzieren, können Sie Elemente in einem Using "stapeln". blockieren:

Using connx As New MySqlConnection(MySQLConnStr),
    cmd As New MySqlCommand(sql, connx)
    ...
End Using

Beachten Sie das Komma am Ende der ersten Zeile.

Ich wäre überrascht, wenn dies nicht die Ursache Ihres Leaks wäre (natürlich müsste der gesamte Code geändert werden).