Hay varias cosas en tu código.
- Primero active
Option Strict. La función se declara para devolver una cadena, pero está intentando devolverObjectconReturn result - Todo que implementa un
DisposeEl método debe usarse dentro de unUsingcuadra. Esto le permite declarar e inicializar un objeto, usarlo y desecharlo al final. Parameters.Addes mejor queAddWithValue. El último obliga al proveedor de base de datos a adivinar el tipo de datos en función de los datos.- Dependiendo de la carga y si ese método se usa mucho, puede cargar los datos en una
DataTabley haga búsquedas en eso en lugar de consultar la base de datos una y otra vez.
El problema central es (probablemente) que no se deshace del DBCommand objeto. Mira el constructor que usas:
Dim cmdx As New MySqlCommand(cmdTextx, connx)
El DBCommand al objeto se le pasa una referencia a la conexión. Aunque elimine explícitamente la conexión, cmdx todavía tiene una referencia a él, y eso no fue desechado. Using los bloques hacen que sea sencillo asegurarse de que las cosas se eliminen:
Dim sql = "Select `Cert` From `Courses` WHERE `ID`example@sqldat.com"
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
Para reducir la sangría, puede "apilar" elementos en uno Using bloque:
Using connx As New MySqlConnection(MySQLConnStr),
cmd As New MySqlCommand(sql, connx)
...
End Using
Tenga en cuenta la coma al final de la primera línea.
Me sorprendería si esta no fuera la causa de la filtración (por supuesto, habría que cambiar todo el código).