سؤال

لدي وظيفة تسحب السجلات المقالات من قاعدة بيانات MSSQL. بعض عناوين URL إلى ملفات PDF، وغيرها من المواد الفعلية المخزنة في SQL. لا تحتوي المقالات المخزنة على عنوان URL (DBNULL) في السجل، لذلك أريد أن أكون قادرا على تحليل ذلك. حاولت اختبار بسيط:

If Row.Item("url").GetType Is GetType(DBNull) Then
    //' do something here....
End If

ومع ذلك، أحصل على "Conversion from type 'DBNull' to type 'String' is not valid."استثناء. الجزء المضحك هو، عندما أفعل مراقبة على المشروط أعلاه، فإنه يعود True أو False.

أي شخص يعرف لماذا يحدث هذا و / أو طريقة لإصلاح هذا؟ شكرا!

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

المحلول

لماذا لا تستخدم فقط:

If Row.IsNull("url") Then
    //' do something here....
End If

نصائح أخرى

أنا دائما استخدام هذا الاختبار فقط في السجل:

If IsDBNull(strSQLTiggRes("url")) Then
     'Do something                   .
Else
     'do something else
end if

انا يعجبني

if (DBNull.Value.Equals(Row.Item("url")))

يحاول

If Row.Item("url") = DBNull.Value

الخطأ يخبرك بذلك Row.Item("url") هو System.String لذلك فإن القيمة في هذه المرحلة لن DbNull.

جرب شيئا مثل هذا:

If Row.Item("url") Is Nothing Then
    //' do something here....
End If

لا يمكنك فقط القيام به

If Row.Item("url") = DBNull.Value Then

End If

تفضيلي هو:

If Not Object.Equals(DBNull.Value, Row.Item("url")) Then
  'Hooray!
End If

في VB، يمكنك أيضا استخدام IsDBNull وظيفة (Microsoft.VisualBasic إخلاء المسئولية) مباشرة:

If Not IsDBNull(Row.Item("url")) Then
  'Hooray!
End It

استخدم هذا.

if row("ColumnName") is DBNull.value Then
     'do something
end if

ستجد أنه يجب عليك استخدامه في هذه الحالة وأنت لا تقارن DTO القيم ليس فقط الأنواع. قد ترغب أيضا في وضعه في وظيفة قابلة لإعادة الاستخدام التي يمكنك استخدامها للعودة إلى لا شيء بدلا من DBNull

function checkvalue(item as object)
     if item is dbnul.value then
          return nothing
     else
          return item
     end if
 end function
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top