Ci sono diverse cose nel tuo codice.
- Prima attivazione di
Option Strict
. La funzione è dichiarata per restituire una stringa, ma stai cercando di restituireObject
conReturn result
- Tutto che implementa un
Dispose
dovrebbe essere usato all'interno di unUsing
bloccare. Questo ti permette di dichiarare e inizializzare un oggetto, usarlo e smaltirlo alla fine. Parameters.Add
è migliore diAddWithValue
. 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).