Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

Contagem do pool de conexões MySQL


Existem várias coisas no seu código.
  • Primeiro ative Option Strict . A função é declarada para retornar uma string, mas você está tentando retornar Object com Return result
  • Tudo que implementa um Dispose deve ser usado dentro de um Using quadra. Isso permite que você declare e inicialize um objeto, use-o e descarte-o no final.
  • Parameters.Add é melhor que AddWithValue . 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).