Има няколко неща във вашия код.
- Първо включете
Option Strict. Функцията е декларирана да връща низ, но вие се опитвате да върнетеObjectсReturn result - Всичко който реализира
Disposeметодът трябва да се използва вUsingблок. Това ви позволява да декларирате и инициализирате обект, да го използвате и да го изхвърлите в края. Parameters.Addе по-добре отAddWithValue. По-късното принуждава доставчика на DB да отгатне типа данни въз основа на данните.- В зависимост от натоварването и дали този метод се използва много, можете да заредите данните в
DataTableи правете справки за това, вместо да правите запитвания към БД отново и отново.
Основният проблем е (вероятно), че не изхвърляте DBCommand обект. Вижте конструктора, който използвате:
Dim cmdx As New MySqlCommand(cmdTextx, connx)
DBCommand на обекта се предава препратка към връзката. Въпреки че изрично изхвърляте връзката, cmdx все още има препратка към него ито не беше изхвърлен. Using блокове улесняват да сте сигурни, че нещата са изхвърлени:
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
За да намалите вдлъбнатината, можете да „подредите“ елементи в едно Using блок:
Using connx As New MySqlConnection(MySQLConnStr),
cmd As New MySqlCommand(sql, connx)
...
End Using
Обърнете внимание на запетаята в края на първия ред.
Ще се изненадам, ако това не е причината за изтичането ви (разбира се, че целият код ще трябва да бъде променен).