Có một số thứ trong mã của bạn.
- Đầu tiên, hãy bật
Option Strict
. Hàm được khai báo để trả về một chuỗi, nhưng bạn đang cố trả vềObject
vớiReturn result
- Mọi thứ triển khai
Dispose
phương thức phải được sử dụng bên trongUsing
khối. Điều này cho phép bạn khai báo và khởi tạo một đối tượng, sử dụng nó và loại bỏ nó khi kết thúc. -
Parameters.Add
tốt hơnAddWithValue
. Càng về sau, Nhà cung cấp DB phải đoán kiểu dữ liệu dựa trên dữ liệu. - Tùy thuộc vào tải và liệu phương pháp đó có được sử dụng nhiều hay không, bạn có thể tải dữ liệu vào
DataTable
và thực hiện tra cứu về điều đó thay vì truy vấn lặp đi lặp lại DB.
Vấn đề cốt lõi (có thể) là bạn không hủy bỏ DBCommand
vật. Nhìn vào hàm tạo mà bạn sử dụng:
Dim cmdx As New MySqlCommand(cmdTextx, connx)
DBCommand
đối tượng được chuyển một tham chiếu đến kết nối. Ngay cả khi bạn loại bỏ kết nối một cách rõ ràng, cmdx
vẫn có tham chiếu đến nó và nó đã không được xử lý. Using
khối giúp đơn giản hóa việc đảm bảo mọi thứ được xử lý:
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
Để giảm thụt lề, bạn có thể "xếp chồng" các mục thành một Using
khối:
Using connx As New MySqlConnection(MySQLConnStr),
cmd As New MySqlCommand(sql, connx)
...
End Using
Lưu ý dấu phẩy ở cuối dòng đầu tiên.
Tôi sẽ rất ngạc nhiên nếu đây không phải là nguyên nhân khiến bạn bị rò rỉ (tất nhiên là tất cả mã sẽ cần được thay đổi).