Der er flere ting i din kode.
- Tænd først
Option Strict. Funktionen er erklæret at returnere en streng, men du forsøger at returnereObjectmedReturn result - Alt som implementerer en
Disposemetode bør bruges i enUsingblok. Dette giver dig mulighed for at erklære og initialisere et objekt, bruge det og bortskaffe det til sidst. Parameters.Adder bedre endAddWithValue. Det senere tvinger DB-udbyderen til at gætte datatypen baseret på dataene.- Afhængigt af belastningen og om metoden bruges meget, kan du indlæse dataene til en
DataTableog lav opslag på det i stedet for at forespørge i databasen igen og igen.
Kerneproblemet er (sandsynligvis), at du ikke bortskaffer DBCommand objekt. Se på den konstruktør du bruger:
Dim cmdx As New MySqlCommand(cmdTextx, connx)
DBCommand objekt sendes en reference til forbindelsen. Selvom du udtrykkeligt disponerer over forbindelsen, cmdx har stadig en henvisning til det, og det blev ikke bortskaffet. Using blokke gør det nemt at være sikker på, at tingene er bortskaffet:
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
For at reducere indrykning kan du "stable" elementer i én Using blokere:
Using connx As New MySqlConnection(MySQLConnStr),
cmd As New MySqlCommand(sql, connx)
...
End Using
Bemærk kommaet i slutningen af den første linje.
Jeg ville blive overrasket, hvis dette ikke var årsagen til din lækage (selvfølgelig skulle al koden ændres).