سؤال

وأنا أقرأ ملف XML إلى DataSet وتحتاج إلى الحصول على البيانات من مجموعة البيانات. نظرا لأنه هو ملف التكوين المستخدم للتحرير قد تكون أو لا تكون الحقول هناك. للتعامل مع الحقول المفقودة كذلك أود أن تأكد من أن كل عمود في DataRow موجود وليس DBNULL.

وأنا بالفعل تحقق للDBNULL لكني لا أعرف كيفية التأكد من وجود عمود دون أن يكون ذلك بطرح استثناء أو باستخدام وظيفة حلقات على كل أسماء الأعمدة. ما هي أفضل طريقة للقيام بذلك؟

هل كانت مفيدة؟

المحلول

وDataRow هي لطيفة في الطريقة التي لديهم الجدول الأساسي من ربط لهم. مع الجدول المصدر يمكنك التحقق من صف معين يحتوي على عمود معين في ذلك.

    If DataRow.Table.Columns.Contains("column") Then
        MsgBox("YAY")
    End If

نصائح أخرى

ويمكنك استخدام DataSet.Tables(0).Columns.Contains(name) للتحقق ما إذا كان DataTable يحتوي على عمود مع اسم معين.

وهناك طريقة أخرى لمعرفة ما إذا كان وجود العمود هو للتحقق من Nothing عادت القيمة من مفهرس جمع Columns عند تمرير اسم العمود إليه:

If dataRow.Table.Columns("ColumnName") IsNot Nothing Then
    MsgBox("YAY")
End If

وربما يفضل هذا النهج على واحد يستخدم الأسلوب Contains("ColumnName") عندما التعليمة البرمجية التالية سوف تحتاج بعد ذلك للحصول على هذا DataColumn لمزيد من الاستخدام. على سبيل المثال، قد تريد أن تعرف أي نوع لديه القيمة المخزنة في عمود:

Dim column = DataRow.Table.Columns("ColumnName")
If column IsNot Nothing Then
    Dim type = column.DataType
End If

في هذه الحالة هذا النهج يوفر لك استدعاء Contains("ColumnName") في نفس الوقت مما يجعل الشفرة قليلا أكثر نظافة.

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

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top