मैं इस त्रुटि को कैसे संभाल सकता हूं: ‘ऑब्जेक्ट को dbnull से अन्य प्रकारों में नहीं डाला जा सकता।’?


नमस्ते,

मैं इस कोड का उपयोग करके VB.NET (विजुअल स्टूडियो) से MYSQLWorkbench डेटाबेस से कनेक्ट करने का प्रयास कर रहा हूं:

Imports System.Data
Imports MySql.Data.MySqlClient
Imports MySql.Data

Public Class Form1

    Dim oCon As MySql.Data.MySqlClient.MySqlConnection


    Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load

        Dim sProveedor As String

        sProveedor = "server = localhost; database = vikingos_barberia; user id = root; password = **********; port = 3306"
        oCon = New MySqlClient.MySqlConnection(sProveedor)

        oCon.Open()
        MsgBox("Conexion Exitosa!!")


    End Sub
End Class

मैंने क्या प्रयास किया है:

मैंने बिना किसी बदलाव के पैरामीटर को कई बार सत्यापित किया।

समाधान 2

डेव जो कहते हैं, उसमें जोड़ने के लिए, यह और भी बदतर है – आप डीबी के लिए एक कनेक्शन खोलते हैं जिसका उपयोग कभी नहीं किया जा सकता क्योंकि यह केवल स्थानीय चर में संग्रहीत होता है, जो फॉर्म के अंत में दायरे से बाहर हो जाता है। इवेंट हैंडलर लोड करें।

चूंकि इसे विधि के बाहर बिल्कुल भी एक्सेस नहीं किया जा सकता है (वास्तव में विधि समाप्त होने पर सभी स्थानीय चर मौजूद नहीं होते हैं) आपके द्वारा बनाया गया कनेक्शन पूरी तरह से बेकार है, और केवल सर्वर पर दुर्लभ संसाधनों को लेता है।

आपको हमेशा हमें ए Using किसी भी DB ऑब्जेक्ट (कनेक्शन, कमांड, रीडर और एडाप्टर) के निर्माण के आसपास ब्लॉक करें ताकि ब्लॉक समाप्त होने पर उन्हें स्वचालित रूप से बंद किया जा सके और उनका निपटान किया जा सके:

वी.बी
Using con As New SqlConnection(strConnect)
	con.Open()
	Using cmd As New SqlCommand("SELECT iD, description FROM myTable", con)
		Using reader As SqlDataReader = cmd.ExecuteReader()
			While reader.Read()
				Dim id__1 As Integer = CInt(reader("iD"))
				Dim desc As String = DirectCast(reader("description"), String)
				Console.WriteLine("ID: {0}" & vbLf & "    {1}", iD, desc)
			End While
		End Using
	End Using
End Using

समाधान 1

आपके द्वारा पोस्ट किया गया कोड संभवतः वह त्रुटि उत्पन्न नहीं कर सकता। त्रुटि संदेश डेटाबेस से पुनर्प्राप्त किसी चीज़ को परिवर्तित करने को संदर्भित करता है जहां फ़ील्ड मान DbNull है और आप उसे किसी अन्य प्रकार में परिवर्तित करने का प्रयास कर रहे हैं।

आपके द्वारा पोस्ट किया गया कोड किसी क्वेरी को बिल्कुल भी निष्पादित नहीं करता है। आप बस फॉर्म_लोड ईवेंट में एक कनेक्शन खोल रहे हैं।

एक साइड-नोट के रूप में, आपको डेटाबेस से कनेक्शन नहीं खोलना चाहिए और इसे अपने ऐप के जीवनकाल तक खुला नहीं रखना चाहिए। आपको डेटाबेस से कनेक्शन केवल तभी खोलना चाहिए जब आपको किसी क्वेरी को निष्पादित करने की आवश्यकता हो, और जितनी जल्दी हो सके इसे बंद करना चाहिए।

समाधान 3

समस्या यह है कि आप Oracle की बहुत ख़राब MySql.Data क्लास लाइब्रेरी का उपयोग कर रहे हैं। इसका रख-रखाव अच्छी तरह से नहीं किया गया है और इससे बचना चाहिए। यह मारियाडीबी के नए संस्करणों के साथ संगत नहीं है और त्रुटियां अक्सर आपके द्वारा प्राप्त की तरह निरर्थक होती हैं।

इसके बजाय वास्तव में खुले स्रोत MySqlConnector का उपयोग करने के लिए स्विच करें। कोड समान है, आपको बस प्रत्येक मॉड्यूल या कक्षा के शीर्ष पर आयात पंक्ति को बदलना होगा।

コメント

タイトルとURLをコピーしました