Технически проблема не в том, что столбец нулевой.String
является ссылочным типом, поэтому он может иметь значение null (хотя, если бы он был нулевым, вы все равно не смогли бы вызвать ToString
для него).На самом деле ADO.NET всегда возвращает DBNull.Value
для всех столбцов, в которых строка содержит нулевое значение.
Вы можете проверить это следующим образом:
If row.Item("Phone") <> DBNull.Value Then
customerContact._phone1 = row.Item("Phone")?.ToString()
End If
Примечание.Я использовал ?.
вместо .
при вызове ToString
на тот случай, если столбец на самом деле является нулевым, а не DbNull.Value
.Причина этого в том, что я не знаю, какой код вы используете для заполнения DataTable
.Если его заполняет ADO.NET, он никогда не будет нулевым, но если это пользовательский код, который заполняет его каким-либо другим способом, он может получить в нем действительные нули.
Поскольку вы используете DataTable
чтобы вернуть значение, у него есть удобный IsNull
метод, который вы можете использовать, который немного очищает код:
If Not row.IsNull("Phone") Then
customerContact._phone1 = row.Item("Phone")?.ToString()
End If
Очевидно, что если вы делаете это много, он будетхорошо бы обернуть его в функцию многократного использования.Кроме того, если вы хотите сократить его до одной строки, вы можете сделать это так:
._phone1 = If(row.IsNull("Phone"), row.Item("Phone")?.ToString(), Nothing)