DBNull был в основном задействован для игры с необнуляемыми типами значений, до .NET 2.0. Благодаря дизайну ADO.NET вы не сможете избежать DBNull, если не выберете более прямой подход. DBNull является встроенным ядром ADO.NET, поэтому вам придется научиться жить с этим, если вы хотите продолжать его использовать.
Если вы предоставляете свои собственные объекты транспорта данных вместо того, чтобы полагаться на общее пространство имен System.Data, вы можете проверить (при чтении результатов с помощью средства чтения данных), если значение равно нулю, но вам понадобится какой-то способ генерировать строго типизированные объекты и сопоставления, потому что это действительно утомительная работа.
Насколько мне известно, DBNull встроен в дизайн ADO.NET, и лучший способ создания ваших приложений, если вы его используете, - это объединить (нормализовать) DBNull и null. По сути, предоставьте свой собственный класс DbConvert, который перехватывает DBNull и возвращает фактическую нулевую ссылку, если значением является DBNull. Это минимальное требование, но как только это будет сделано, у вас будет меньше беспокойства о значениях DBNull.