Ada beberapa hal dalam kode Anda.
- Pertama aktifkan
Option Strict
. Fungsi dideklarasikan untuk mengembalikan string, tetapi Anda mencoba mengembalikanObject
denganReturn result
- Semuanya yang mengimplementasikan
Dispose
metode harus digunakan di dalamUsing
memblokir. Ini memungkinkan Anda untuk mendeklarasikan dan menginisialisasi objek, menggunakannya, dan membuangnya di akhir. Parameters.Add
lebih 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
DataTable
dan 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`[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
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).