2015-08-11 3 views
2

У меня есть старый код, который я выполняю, чтобы убедиться, что он как можно более стабилен. Однажды в голубой луне что-то ломается и оставляет в базе данных кучу данных мусора, поэтому я просматриваю, где может возникнуть потенциальная ошибка. Я нашел кучу назначений переменных, которые выглядят примерно так:Защита переменной от нулевого значения

myVariable = dr.Item("myItem") & "" 

Если dr.Item("myItem") решает Null, будет ли & "" защитить myVariable от того, Null и установить его в "" или будет Нулевой причинить мне проблемы?

ответ

3

Вы гарантированно получите строку обратно, dr.Item("myItem") - это строка, Nothing или DBNull.Value. Согласно documentation for the & Operator:

Тип данных результата: String. Если одно или оба выражения оценивают значение Nothing или имеют значение DBNull.Value, они рассматриваются как строка со значением "".

+0

Отлично, спасибо за очищение. Мне придется искать в другом месте, тогда для потенциальных проблем. – TheIronCheek

0

Вам не нужно & оператора и дополнительный экземпляр типа String, который конкатенировать оператор будет создавать.
Используйте .ToString() метод

dr.Item("myItem").ToString() 

DataRow.Item возвращение свойство экземпляра типа Object. Затем вызов ToString() метода этого экземпляра будет вернуть то, что вы ожидали в вашем случае (пункт содержит значение типа String)

Если элемент содержит DbNull значения, то пустая строка будет возвращен

DBNull.ToString Method

Или использовать метод расширения .Field(Of T)

dr.Field(Of String)("myItem") 

DataRowExtensions.Field(Of T) Method (DataRow, String)

Если столбец не существует, то Column not in the table Исключение будет выбрано

Смежные вопросы