Váš kód obsahuje několik věcí.
- Nejprve zapněte
Option Strict. Funkce je deklarována tak, že vrací řetězec, ale vy se pokoušíte vrátitObjectpomocíReturn result - Všechno který implementuje
Disposemetoda by měla být použita uvnitřUsingblok. To vám umožňuje deklarovat a inicializovat objekt, používat jej a na konci zlikvidovat. Parameters.Addje lepší nežAddWithValue. To později nutí poskytovatele DB odhadnout datový typ na základě dat.- V závislosti na zatížení a na tom, zda se tato metoda často používá, můžete načíst data do
DataTablea provádějte v tom vyhledávání spíše než dotazování DB znovu a znovu.
Základní problém je (pravděpodobně), že se nezbavíte DBCommand objekt. Podívejte se na konstruktor, který používáte:
Dim cmdx As New MySqlCommand(cmdTextx, connx)
DBCommand objektu je předán odkaz na připojení. I když výslovně zlikvidujete připojení, cmdx stále obsahuje odkaz na něj a to nebyl zlikvidován. Using bloky zjednodušují kontrolu, zda jsou věci zlikvidovány:
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
Chcete-li omezit odsazení, můžete položky „skládat“ do jednoho Using blokovat:
Using connx As New MySqlConnection(MySQLConnStr),
cmd As New MySqlCommand(sql, connx)
...
End Using
Všimněte si čárky na konci prvního řádku.
Překvapilo by mě, kdyby to nebylo příčinou vašeho úniku (samozřejmě by bylo nutné změnit veškerý kód).