Mysql
 sql >> Database >  >> RDS >> Mysql

Conteggio pool di connessioni MySQL

Ci sono diverse cose nel tuo codice.

  • Prima attivazione di Option Strict . La funzione è dichiarata per restituire una stringa, ma stai cercando di restituire Object con Return result
  • Tutto che implementa un Dispose dovrebbe essere usato all'interno di un Using bloccare. Questo ti permette di dichiarare e inizializzare un oggetto, usarlo e smaltirlo alla fine.
  • Parameters.Add è migliore di AddWithValue . Quest'ultimo costringe il provider DB a indovinare il tipo di dati in base ai dati.
  • A seconda del carico e se tale metodo viene utilizzato molto, è possibile caricare i dati in una DataTable e fare ricerche su quello piuttosto che interrogare il DB più e più volte.

Il problema principale è (probabilmente) che non si elimina il DBCommand oggetto. Guarda il costruttore che usi:

Dim cmdx As New MySqlCommand(cmdTextx, connx)

Il DBCommand all'oggetto viene passato un riferimento alla connessione. Anche se elimini esplicitamente la connessione, cmdx ha ancora un riferimento ad esso e esso non è stato smaltito. Using i blocchi rendono semplice essere sicuri che le cose siano state smaltite:

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

Per ridurre il rientro, puoi "impilare" gli elementi in un unico Using blocco:

Using connx As New MySqlConnection(MySQLConnStr),
    cmd As New MySqlCommand(sql, connx)
    ...
End Using

Nota la virgola alla fine della prima riga.

Sarei sorpreso se questa non fosse la causa della tua perdita (ovviamente tutto il codice dovrebbe essere cambiato).