Как мы решаем всю эту неприятность «Преобразование из типа DBNull в тип String»?

В наших приложениях я не могу вспомнить много случаев, когда мы заботимся о пустых строковых полях. Мы просто хотим, чтобы они отображались как пустые строки в большинстве ситуаций.

Поэтому при использовании встроенного набора данных ADO.NET / datatables возникает ошибка:

Преобразование из типа DBNull в тип String недопустимо

это слишком часто встречается позже в приложении при обращении к любым старым строковым данным.

Это особая проблема, потому что она может так легко нас поймать (и часто не замечается при тестировании)

Я знаю, что есть различные решения:

1. Проверьте .IsXXXNull во всех случаях

Но:

это утомительные лишние несколько строк кода по всему приложению

если мы забудем проверку, даже 1 раз из 100, у нас есть потенциальная ошибка

2. В конструкторе набора данных измените свойство NullValue поля со значения по умолчанию «Исключение выброса» на «Пусто»

Но:

мы должны идентифицировать и изменить каждую таблицу и каждое строковое поле, добавляемое в конструктор набора данных (помните, что по умолчанию используется «Throw Exception»)

если мы забудем об изменении хотя бы 1 раз из 100, у нас может скрыться потенциальная ошибка

3. Избегайте хранения нулей в базе данных

Но:

мы должны идентифицировать и изменить каждую таблицу и каждое строковое поле, которое мы добавляем в базу данных

мы не всегда имеем такой контроль над базовыми данными

4. Не используйте конструктор наборов данных, извлекайте данные в наши собственные объекты классов, разбирайтесь со всеми беспорядками DBNull в нашем собственном коде

Но:

да, мы делаем это для наших «основных» таблиц. но конструктор набора данных - это хороший, быстрый способ добавить список выбора или таблицу поиска, где нам действительно нужно только поведение данных по умолчанию

5. Используйте генератор кода или инфраструктуру, например CSLA, вместо наборов данных.

Но:

большой шаг для решения небольшой проблемы ... во втором ответе на вопрос с самым высоким рейтингом в CSLA с тегами SO упоминается: «Минусы в том, что у него есть некоторая кривая обучения».

Ответы на вопрос(2)

Ваш ответ на вопрос