Existem várias coisas no seu código.
- Primeiro ative
Option Strict
. A função é declarada para retornar uma string, mas você está tentando retornarObject
comReturn result
- Tudo que implementa um
Dispose
deve ser usado dentro de umUsing
quadra. Isso permite que você declare e inicialize um objeto, use-o e descarte-o no final. Parameters.Add
é melhor queAddWithValue
. O último força o provedor de banco de dados a adivinhar o tipo de dados com base nos dados.- Dependendo da carga e se esse método é muito usado, você pode carregar os dados em uma
DataTable
e faça pesquisas sobre isso em vez de consultar o banco de dados repetidamente.
O problema principal é (provavelmente) que você não descarta o
DBCommand
objeto. Veja o construtor que você usa:Dim cmdx As New MySqlCommand(cmdTextx, connx)
O
DBCommand
objeto recebe uma referência à conexão. Mesmo que você descarte explicitamente a conexão, cmdx
ainda tem uma referência a ele, e ele não foi descartado. Using
blocos tornam simples ter certeza de que as coisas são descartadas: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
Para reduzir o recuo, você pode "empilhar" itens em um
Using
quadra:Using connx As New MySqlConnection(MySQLConnStr),
cmd As New MySqlCommand(sql, connx)
...
End Using
Observe a vírgula no final da primeira linha.
Eu ficaria surpreso se essa não fosse a causa do seu vazamento (é claro que todo o código precisaria ser alterado).