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átitObject
pomocíReturn result
- Všechno který implementuje
Dispose
metoda by měla být použita uvnitřUsing
blok. To vám umožňuje deklarovat a inicializovat objekt, používat jej a na konci zlikvidovat. Parameters.Add
je 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
DataTable
a 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`[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
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).