Ada beberapa hal dalam kode Anda.
- Pertama aktifkan
Option Strict. Fungsi dideklarasikan untuk mengembalikan string, tetapi Anda mencoba mengembalikanObjectdenganReturn result - Semuanya yang mengimplementasikan
Disposemetode harus digunakan di dalamUsingmemblokir. Ini memungkinkan Anda untuk mendeklarasikan dan menginisialisasi objek, menggunakannya, dan membuangnya di akhir. Parameters.Addlebih baik daripadaAddWithValue. Nanti memaksa Penyedia DB untuk menebak tipe data berdasarkan data.- Bergantung pada beban dan apakah metode itu sering digunakan, Anda dapat memuat data ke
DataTabledan lakukan pencarian tentang itu daripada meminta DB berulang-ulang.
Masalah intinya adalah (mungkin) Anda tidak membuang DBCommand obyek. Lihat konstruktor yang Anda gunakan:
Dim cmdx As New MySqlCommand(cmdTextx, connx)
DBCommand objek dilewatkan referensi ke koneksi. Meskipun Anda secara eksplisit memutuskan koneksi, cmdx masih memiliki referensi untuk itu, dan itu tidak dibuang. Using blok membuatnya mudah untuk memastikan barang-barang sudah dibuang:
Dim sql = "Select `Cert` From `Courses` WHERE `ID`example@sqldat.com"
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
Untuk mengurangi lekukan, Anda dapat "menumpuk" item menjadi satu Using blok:
Using connx As New MySqlConnection(MySQLConnStr),
cmd As New MySqlCommand(sql, connx)
...
End Using
Perhatikan koma di akhir baris pertama.
Saya akan terkejut jika ini bukan penyebab kebocoran Anda (tentu saja semua kode perlu diubah).