如果值为空,则将字符串设置为空

时间:2018-10-26 12:02:45

标签: database vb.net structure

我不确定如何在这里搜索要解决的问题。在我正在编写的程序中(在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 :(得分:2)

从技术上讲,问题不在于该列为空。 String是引用类型,因此只能为null(尽管如果为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来填充它,则永远不会为null,但是如果它是通过其他方式填充它的自定义代码,则可能会在其中获得实际的null。

由于您使用的是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)

答案 1 :(得分:0)

字符串串联可用于将Nothing转换为""(我的答案here中的其他替代方法)

._fax = row!Fax & "",
相关问题