Hay varias cosas en tu código.
- Primero active
Option Strict
. La función se declara para devolver una cadena, pero está intentando devolverObject
conReturn result
- Todo que implementa un
Dispose
El método debe usarse dentro de unUsing
cuadra. Esto le permite declarar e inicializar un objeto, usarlo y desecharlo al final. Parameters.Add
es 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
DataTable
y 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`[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
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).