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