استثناء إينفاليدكاستيكسسيبشن عند الرجوع قيمة DataColumn هي NULL

تشير هذه المقالة إلى مكتبة فئات Microsoft.NET Framework مساحات الأسماء التالية:

  • System.Data
  • System.Data.SqlClient

الأعراض

عندما تشير قيمة DataColumn هي NULL، ما إذا كانت مصنفة أو غير مصنفة، تتلقى استثناء.

مجموعات البياناتالمكتوبة، تتلقى الاستثناء التالي:

حدث استثناء غير معالج من النوع 'System.Data.StrongTypingException' في invalidcast.exe
معلومات إضافية: لا يمكن الحصول على القيمة لأنها DBNULL.
ل مجموعات البياناتغير مصنفة، تتلقى الاستثناء التالي:

حدث استثناء غير معالج من النوع 'System.InvalidCastException' في microsoft.visualbasic.dll
معلومات إضافية: تحويل من نوع 'DBNULL' كتابة 'السلسلة' غير صالح.

السبب

السبب الأول

عند استخدام مجموعة البياناتمكتوبة، هو سبب الاستثناء عند الرجوع إلى قيمة العمود هي NULL.

السبب الثاني

عند استخدام مجموعة البياناتغير مصنفة، قيمة العمود فارغ، وتدعم المتغير الذي تعينه NULL.

الحل

السبب الأول

اختبار العمود NULL قبل الوصول إلى القيمة الخاصة به. في غير مكتوبة DataSet، استخدم الأسلوب DataRow.IsNull . في مكتوب DataSet، استخدم الخاصية DataRow.IscolumnnameNull .

السبب الثاني

استخدام متغير نوع بيانات مناسب يمكنه تخزين خالية.

الحالة

يعتبر هذا السلوك حسب التصميم.

مزيد من المعلومات

خطوات إعادة إنشاء المشكلة

  1. Microsoft Visual Studio.NET.بدء تشغيل
  2. إنشاء مشروع تطبيق Windows جديد في Visual Basic.NET. Form1 يضاف إلى المشروع بشكل افتراضي.
  3. تأكد من أن المشروع يحتوي على مرجع إلى مساحة الاسم System.Data .
  4. قم بوضع عنصر تحكم الزر في Form1.
  5. تغيير خاصية اسم الزر إلى بتنونتيبي والخاصية Text انتيب.
  6. استخدام عبارة الاستيراد في مساحة الاسم النظام ومساحه الاسم System.Data ، حيث غير مطلوبة إلى تأهيل التعريفات بمساحات لاحقاً في التعليمات البرمجية الخاصة بك. أضف التعليمات البرمجية التالية إلى المقطع "تعريفات عامة" Form1:
       Imports System   Imports System.Data
    Imports System.Data.SqlClient

  7. أضف التعليمات البرمجية التالية في الحدث btnUntype :
            Dim str As String        Dim ds As New DataSet()
    Dim r As DataRow
    Dim con As New SqlConnection("server=myserver;integrated security=sspi;database=northwind")
    Dim da As New SqlDataAdapter("select * from customers where customerid='ANTON'", con)
    da.Fill(ds, "customer")
    r = ds.Tables(0).Rows(0)
    'Uncomment to check for Null.
    'If r.IsNull("fax") Then
    ' MessageBox.Show("Value is Null")
    'End If
    str = r("fax") 'Comment line to check for Null.
    MessageBox.Show(str) 'Comment line to check for Null.


  8. تعديل سلسلة الاتصال (myserver) كاسم الملقم المناسب للبيئة الخاصة بك.
  9. حفظ المشروع الخاص بك. في القائمة " تصحيح "، انقر فوق ابدأ لتشغيل المشروع الخاص بك.
  10. انقر فوق انتيب. لاحظ الاستثناء السابق ذكره مجموعة البياناتغير مصنفة.
  11. قم بإلغاء تعريف عبارة IF ، وثم تعليق البنود تحت عبارة IF للتحقق من قيمة خالية.
  12. حفظ المشروع الخاص بك. من القائمة تصحيح ، انقر فوق ابدأ، ثم قم بتشغيل المشروع الخاص بك. لاحظ أن مربع رسالة يعرض القيمة هو "Null".
  13. قم بوضع عنصر تحكم زر آخر في Form1.
  14. تغيير خاصية اسم الزر إلى بتنتيبي وخاصية النص إلى نوع.
  15. إنشاء مجموعة بيانات مكتوبة باستخدام جدول "العملاء" في قاعدة بيانات Northwind. إعادة تسمية SQLDataAdapter sqlda.
  16. أضف التعليمات البرمجية التالية إلى حدث بتنتيبي :
            sqlda.Fill(DataSet11)        Dim str As String
    Dim int As Integer
    Dim cust As DataSet1.CustomersRow
    cust = DataSet11.Customers.Rows(0)
    'Uncomment to catch null values.
    'If cust.IsFaxNull Then
    ' MessageBox.Show("Value is Null")
    'End If
    str = cust.Fax()
    MessageBox.Show(str)
    ' Comment line to check for Null.

  17. تشغيل التطبيق ومن ثم انقر فوق الزر " نوع ". لاحظ الاستثناء.
  18. قم بإلغاء تحديد إذا... ثم كتلة من التعليمات البرمجية ثم تعليق الأخيرتين الأسطر من التعليمات البرمجية.
  19. حفظ التطبيق، ثم قم بتشغيل التطبيق ولاحظ مربع الرسالة.

المراجع

لمزيد من المعلومات حول إنشاء مجموعة بيانات مكتوبة، انقر فوق رقم المقالة التالي لعرضها في "قاعدة المعارف ل Microsoft":

315678 كيفية إنشاء واستخدام بيانات مكتوبة باستخدام Visual Basic.NET

لمزيد من المعلومات حول ADO.NET، انقر فوق رقم المقالة التالي لعرضها في "قاعدة المعارف ل Microsoft":

خريطة الطريق 313590 ل ADO.NET

خصائص

رقم الموضوع: 310371 - آخر مراجعة: 18‏/01‏/2017 - المراجعة: 1

تعليقات