كيف يمكنني التعامل مع هذا الخطأ: “لا يمكن تحويل الكائن من dbnull إلى أنواع أخرى.”؟


مرحبًا،

أحاول الاتصال بقاعدة بيانات MYSQLWorkbench من VB.NET (Visual Studio) باستخدام هذا الرمز:

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

للإضافة إلى ما يقوله ديف، فإن الأمر أسوأ من ذلك – يمكنك فتح اتصال بقاعدة البيانات والذي لا يمكن استخدامه أبدًا لأنه يتم تخزينه فقط في متغير محلي، والذي يخرج عن النطاق في نهاية معالج الأحداث Form.Load.

نظرًا لأنه لا يمكن الوصول إليه على الإطلاق خارج الطريقة (في الواقع لم تعد جميع المتغيرات المحلية موجودة عندما تنتهي الطريقة)، فإن الاتصال الذي تقوم بإنشائه عديم الفائدة تمامًا، ويستهلك فقط الموارد النادرة على الخادم.

يجب عليك دائما لنا أ Using حظر حول إنشاء أي كائنات قاعدة بيانات (الاتصال، والأوامر، والقارئ، والمحول) لإغلاقها تلقائيًا والتخلص منها عند انتهاء الحظر:

VB
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 وأنت تحاول تحويل ذلك إلى نوع آخر.

الكود الذي نشرته لا ينفذ استعلامًا على الإطلاق. كل ما تفعله هو فتح اتصال في حدث Form_Load.

كملاحظة جانبية، يجب ألا تفتح اتصالاً بقاعدة البيانات وتبقيه مفتوحًا طوال عمر التطبيق الخاص بك. يجب عليك فتح اتصال بقاعدة البيانات فقط عندما تحتاج إلى تنفيذ استعلام، وإغلاقه في أسرع وقت ممكن.

الحل 3

تكمن المشكلة في أنك تستخدم مكتبة فئة MySql.Data الخاصة بشركة Oracle والتي تحتوي على أخطاء كبيرة. لا يتم صيانتها جيدًا ويجب تجنبها. إنه غير متوافق مع الإصدارات الأحدث من MariaDB وغالبًا ما تكون الأخطاء غير منطقية مثل تلك التي تلقيتها.

بدلًا من ذلك، قم بالتبديل إلى استخدام MySqlConnector مفتوح المصدر حقًا. الكود متطابق، كل ما عليك فعله هو تغيير سطر الواردات الموجود أعلى كل وحدة أو فئة.

コメント

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