Mysql
 sql >> Base de données >  >> RDS >> Mysql

Nombre de pools de connexions MySQL

Il y a plusieurs choses dans votre code.

  • Activez d'abord Option Strict . La fonction est déclarée pour renvoyer une chaîne, mais vous essayez de renvoyer Object avec Return result
  • Tout qui implémente un Dispose La méthode doit être utilisée dans un Using bloc. Cela vous permet de déclarer et d'initialiser un objet, de l'utiliser et de le supprimer à la fin.
  • Parameters.Add vaut mieux que AddWithValue . Ce dernier oblige le fournisseur de base de données à deviner le type de données en fonction des données.
  • Selon la charge et si cette méthode est souvent utilisée, vous pouvez charger les données dans un DataTable et faites des recherches là-dessus plutôt que d'interroger la base de données encore et encore.

Le problème principal est (probablement) que vous ne disposez pas de la DBCommand objet. Regardez le constructeur que vous utilisez :

Dim cmdx As New MySqlCommand(cmdTextx, connx)

La DBCommand object reçoit une référence à la connexion. Même si vous supprimez explicitement la connexion, cmdx y fait toujours référence, et il n'a pas été disposé. Using les blocs simplifient la tâche pour s'assurer que les choses sont éliminées :

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

Pour réduire l'indentation, vous pouvez "empiler" les éléments en un seul Using bloquer :

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

Notez la virgule à la fin de la première ligne.

Je serais surpris si ce n'était pas la cause de votre fuite (bien sûr, tout le code devrait être changé).