आपके कोड में कई चीजें हैं।
- पहले
Option Strict
चालू करें . फ़ंक्शन को एक स्ट्रिंग वापस करने के लिए घोषित किया गया है, लेकिन आपObject
को वापस करने का प्रयास कर रहे हैंReturn result
. के साथ - सब कुछ जो एक
Dispose
. लागू करता है विधि का उपयोगUsing
. के अंदर किया जाना चाहिए खंड मैथा। यह आपको किसी वस्तु को घोषित करने और आरंभ करने, उसका उपयोग करने और अंत में उसका निपटान करने की अनुमति देता है। Parameters.Add
AddWithValue
. से बेहतर है . बाद में डीबी प्रदाता को डेटा के आधार पर डेटाटाइप का अनुमान लगाने के लिए मजबूर करता है।- लोड के आधार पर और क्या उस विधि का बहुत अधिक उपयोग किया जाता है, आप डेटा को
DataTable
पर लोड कर सकते हैं और डीबी को बार-बार पूछने के बजाय उस पर लुकअप करें।
मूल मुद्दा यह है (शायद) कि आप DBCommand
. का निपटान नहीं करते हैं वस्तु। आपके द्वारा उपयोग किए जाने वाले कंस्ट्रक्टर को देखें:
Dim cmdx As New MySqlCommand(cmdTextx, connx)
DBCommand
ऑब्जेक्ट कनेक्शन के संदर्भ में पारित किया गया है। भले ही आप स्पष्ट रूप से कनेक्शन का निपटान करते हैं, cmdx
अभी भी इसका एक संदर्भ है, और यह निस्तारण नहीं किया गया। Using
ब्लॉक यह सुनिश्चित करना आसान बनाते हैं कि चीजों का निपटारा हो गया है:
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
इंडेंटेशन को कम करने के लिए, आप आइटम्स को एक Using
. में "स्टैक" कर सकते हैं ब्लॉक करें:
Using connx As New MySqlConnection(MySQLConnStr),
cmd As New MySqlCommand(sql, connx)
...
End Using
पहली पंक्ति के अंत में अल्पविराम नोट करें।
मुझे आश्चर्य होगा अगर यह आपके रिसाव का कारण नहीं था (बेशक सभी कोड को बदलने की आवश्यकता होगी)।