كيف يمكنني معرفة ما إذا كان يوجد عمود في VB.Net DataRow
سؤال
وأنا أقرأ ملف 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")
في نفس الوقت مما يجعل الشفرة قليلا أكثر نظافة.
ويمكنك تغليف حظرك من التعليمات البرمجية مع محاولة ... بيان الصيد، وعند تشغيل التعليمات البرمجية الخاصة بك، إذا لم يكن موجودا العمود فإنه سيتم رمي استثناء. يمكنك بعد ذلك معرفة ما عدا المحدد الذي يرمي، وأنها تعامل مع هذا الاستثناء معين بطريقة مختلفة إذا كنت ترغب في ذلك، مثل عودة "العمود غير موجود".