وعليكم السلام ورحمة الله وبركاتة
تم تغيير التالي : في الأمر Private Sub Retrieve
تم تغيير الحلقة For Each
من : For Each row In dt.Rows ( هنا row نوعها Object , أصل جميع الكائنات في الـ Net. )
إلى : For Each row
As DataRow In dt.Rows ( هنا row نوعها
DataRow , وهو النوع الصحيح , لأنك تقوم بالإلتفاف على جدول , والجدول عبارة عن مجموعة سجلات, والـ row هو عبارة عن سجل واحد )
لذلك يجب تعريف ما هو نوع row
حتى نتمكن من الوصول إلى وظائف وأوامر وخصائص كل سجل نقوم بالإلتفاف علية ,
من :
كود :
For Each row In dt.Rows
Populate(row(0), row(1), row(2), row(3), row(4), row(5))
Next
إلى :
كود :
For Each row As DataRow In dt.Rows
Dim id As String = "" : If Not row.IsNull(0) Then id = row(0)
Dim spacecraft As String = "" : If Not row.IsNull(1) Then spacecraft = row(1)
Dim propellant As String = "" : If Not row.IsNull(2) Then propellant = row(2)
Dim destination As String = "" : If Not row.IsNull(3) Then destination = row(3)
Dim destination1 As String = "" : If Not row.IsNull(4) Then destination1 = row(4)
Dim destination2 As String = "" : If Not row.IsNull(5) Then destination2 = row(5)
Populate(id, spacecraft, propellant, destination, destination1, destination2)
Next
IsNull هي أحد الوظائف الموجودة في الكائن المسمى row والذي هو من نوع DataRow
يتم التحقق من الحقل رقم صفر إذا كان فارغ أم لا .
بالكود التالي :
If Not row.IsNull(0) Then
إذا لم يكن فارغ إذن ضع القيمة .
لأن الحقل الفارع يعبر عنه بـ Null
ولا يمكن تحويل Null إلى نص ( كما أنه لا يمكن تحويل Null إلى أي شيء , غير قابل للتحويل )
لأن Null تعني لا شيء
ومحاولة التحويل ستنتج خطأ.
لذلك يجب التحقق من قيمة الحقل قبل إستخدامها .