سؤال حول نوع المقارنة ASP.NET و DBNULL
سؤال
لدي وظيفة تسحب السجلات المقالات من قاعدة بيانات 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