В .NET есть ссылка null
, которая используется везде, чтобы обозначить, что ссылка на объект пуста, а затем есть DBNull
, который используется драйверами базы данных (и несколькими другими) для обозначения... почти такой же. Естественно, это создает много путаницы, и процедуры конвертирования должны быть отменены и т.д.
Итак, почему оригинальные авторы .NET решили сделать это? Для меня это бессмысленно. Их документация также не имеет смысла:
Класс DBNull представляет несуществующее значение. Например, в базе данных столбец в строке таблицы может не содержать каких-либо данных. То есть, столбец, как считается, не существует вообще, а не просто не имеет значения. Объект DBNull представляет несуществующий столбец. Кроме того, COM interop использует класс DBNull для различения варианта VT_NULL, который указывает несуществующее значение, и вариант VT_EMPTY, который указывает неопределенное значение.
Что это за дерьмо о столбце, который не существует? Столбец существует, он просто не имеет значения для конкретной строки. Если он не существует, я получаю исключение, пытающееся получить доступ к определенной ячейке, а не DBNull
! Я могу понять необходимость различать VT_NULL
и VT_EMPTY
, но почему бы не сделать вместо этого класс COMEmpty
? Это было бы очень аккуратно подходит для всей платформы .NET.
Я что-то упустил? Может ли кто-нибудь пролить свет, почему был изобретен DBNull
и какие проблемы он может решить?