Если вы не используете пустые типы, лучше всего проверить, является ли значение столбца DBNull. Если это DBNull, тогда установите ссылку на то, что вы используете для null / empty для соответствующего типа данных.
DataRow row = ds.Tables[0].Rows[0];
string value;
if (row["fooColumn"] == DBNull.Value)
{
value = string.Empty;
}
else
{
value = Convert.ToString(row["fooColumn"]);
}
Как сказал Ману, вы можете создать класс преобразования с перегруженным методом преобразования для каждого типа, чтобы вам не приходилось добавлять код в блоки if / else.
Я, однако, подчеркну, что обнуляемые типы - лучший путь, если вы можете их использовать. Причина заключается в том, что с ненулевыми типами вам придется прибегать к «магическим числам», чтобы представлять ноль. Например, если вы отображаете столбец в переменную int, как вы собираетесь представлять DBNull? Часто вы не можете использовать 0, потому что 0 имеет действительное значение в большинстве программ. Часто я вижу, как люди отображают DBNull на int.MinValue, но это также может быть проблематичным. Мой лучший совет такой:
- Для столбцов, которые могут иметь значение null в базе данных, используйте типы, допускающие значения NULL.
- Для столбцов, которые не могут быть нулевыми в базе данных, используйте обычные типы.
Типы Nullable были созданы для решения этой проблемы. Тем не менее, если вы используете более старую версию фреймворка или работаете на кого-то, кто не использует обнуляемые типы, пример кода сработает.