Има няколко неща във вашия код.
- Първо включете
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`[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
За да намалите вдлъбнатината, можете да „подредите“ елементи в едно Using
блок:
Using connx As New MySqlConnection(MySQLConnStr),
cmd As New MySqlCommand(sql, connx)
...
End Using
Обърнете внимание на запетаята в края на първия ред.
Ще се изненадам, ако това не е причината за изтичането ви (разбира се, че целият код ще трябва да бъде променен).