Установка строки как пустой, если значение равно нулю - PullRequest
0 голосов
/ 26 октября 2018

Я не уверен, как искать проблему, которую я пытаюсь решить здесь.В программе, которую я пишу (в VB.Net), я пытаюсь присвоить значения, извлеченные из базы данных, различным переменным в структуре.

Теперь моя проблема в том, что иногда некоторые значения извлекаются из базы данных.NULL, например, не каждый номер телефона имеет добавочный номер.Это то, что у меня есть для моего кода на данный момент:

Structure CustomerContact
    Public _name As String
    Public _email As String
    Public _fax As String
    Public _phone1 As String
    Public _phone2 As String
    Public _phone3 As String
    Public _ext1 As String
    Public _ext2 As String
    Public _ext3 As String
    Public _type1 As String
    Public _type2 As String
    Public _type3 As String
End Structure

    Dim contactData As DataTable = CustomerDBFunctions.GetCustomerContacts(Customer)
    For Each row As DataRow In contactData.Rows
        If contacts.Count < 1 Then
            contacts.Add(New CustomerContact With {
                            ._name = row.Item("FullName").ToString() & " (" & row.Item("ContactType").ToString() & ")",
                            ._email = row.Item("Email").ToString(),
                            ._fax = row.Item("Fax").ToString(),
                            ._phone1 = row.Item("Phone").ToString(),
                            ._ext1 = row.Item("Extension").ToString(),
                            ._type1 = row.Item("PhoneType").ToString()})
        End If
    Next

Прямо сейчас я получаю сообщение об ошибке, когда значение в базе данных равно NULL, потому что он не может присвоить значение NULL для строки,Я бы хотел, чтобы в случаях, когда вместо этого было указано значение NULL, вместо значения переменной было установлено значение "".Я просто не уверен, как это зашифровать.

Ответы [ 2 ]

0 голосов
/ 26 октября 2018

Конкатенация строк может использоваться для преобразования Nothing в "" (другие альтернативы в моем ответе здесь )

._fax = row!Fax & "",
0 голосов
/ 26 октября 2018

Технически проблема не в том, что столбец нулевой.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)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...