Er staan verschillende dingen in je code.
- Schakel eerst
Option Strictin . 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 eenUsingblok. Hiermee kunt u een object declareren en initialiseren, het gebruiken en aan het einde weggooien. Parameters.Addis 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
DataTableladen 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`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
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).