Er staan verschillende dingen in je code.
- Schakel eerst
Option Strict
in . De functie is gedeclareerd om een string terug te geven, maar u probeertObject
. te retourneren metReturn result
- Alles die een
Dispose
. implementeert methode zou moeten worden gebruikt in eenUsing
blok. Hiermee kunt u een object declareren en initialiseren, het gebruiken en aan het einde weggooien. Parameters.Add
is beter danAddWithValue
. Hoe later dwingt de DB-provider om het datatype te raden op basis van de data.- Afhankelijk van de belasting en of die methode veel wordt gebruikt, kunt u de gegevens naar een
DataTable
laden en zoek daarop in plaats van de DB steeds opnieuw te doorzoeken.
Het kernprobleem is (waarschijnlijk) dat u niet beschikt over de DBCommand
voorwerp. Kijk naar de constructor die je gebruikt:
Dim cmdx As New MySqlCommand(cmdTextx, connx)
De DBCommand
object wordt een verwijzing naar de verbinding doorgegeven. Ook al heb je expliciet afstand gedaan van de verbinding, cmdx
heeft er nog steeds een verwijzing naar, en het werd niet afgedaan. Using
blokken maken het eenvoudig om er zeker van te zijn dat dingen worden weggegooid:
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
Om inspringen te verminderen, kunt u items in één "stapelen" Using
blok:
Using connx As New MySqlConnection(MySQLConnStr),
cmd As New MySqlCommand(sql, connx)
...
End Using
Let op de komma aan het einde van de eerste regel.
Het zou me verbazen als dit niet de oorzaak van je lek was (natuurlijk zou alle code moeten worden gewijzigd).