VB DBNull решение с оператором for и без оператора if


В таблице много пробелов, и я хотел бы, чтобы эти пробелы (DBNull) в значениях меток игнорировались и представлялись как пустые значения. Также с добавлением и изменением таблицы через веб-форму было бы трудно контролировать каждый отдельный вход (23 столбца данных).

Можно ли сделать это с помощью утверждения FOR? Я пытался, но не имел никакого успеха. Я мог бы сделать это с помощью оператора IF, но мне пришлось бы сделать это для каждого из 23 ярлыков.

Вот код, который у меня есть до сих пор (спасибо людям на этом сайте).

 Protected Sub TextBox1_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles TextBox1.Load
    Using sqlconn = New SqlConnection("Data Source=.sqlexpress;Initial Catalog=KLIJENTI;Integrated Security=True")
        Using sqlcmd = New SqlCommand("Select NAZIV,PUN_NAZIV, ADRESA, GRAD, OPSTINA, PRAVNA_FORMA,DAT_REG, TRAJANJE, MATICNI, PIB, SIFRA_DELATNOSTI, NAZIV_DELATNOSTI, VELICINA, TEKUCI, RZZO, PIO From Baza Where SIFRE = @SIFRE", sqlconn)
            sqlcmd.Parameters.AddWithValue("@SIFRE", TextBox1.Text)

            sqlconn.Open()

            Dim result = sqlcmd.ExecuteReader()
            While (result.Read())
                If result IsNot Nothing Then
                    Label1.Text = result("NAZIV")
                    Label2.Text = result("PUN_NAZIV")
                    Label3.Text = result("ADRESA")
                    Label4.Text = result("GRAD")
                    Label5.Text = result("OPSTINA")
                    Label6.Text = result("PRAVNA_FORMA")
                    Label7.Text = result("DAT_REG")
                    Label8.Text = result("TRAJANJE")
                    Label9.Text = result("MATICNI")
                    Label10.Text = result("PIB")
                    Label11.Text = result("SIFRA_DELATNOSTI")
                    Label12.Text = result("NAZIV_DELATNOSTI")
                    Label13.Text = result("VELICINA")
                    Label14.Text = result("TEKUCI")
                    Label15.Text = result("RZZO") ' PROBLEM DBNull.Value
                    Label16.Text = result("PIO") ' PROBLEM DBNull.Value There are more labels below but I am stuck here

                Else
                    TextBox1.Focus()


                End If
            End While
        End Using
    End Using
    TextBox1.Text = ""
End Sub

Также есть пробелы повсюду, только в этом случае они находятся в 15-й и 16-й метке.

Спасибо.

3 2

3 ответа:

Просто добавьте эту функцию в свой класс:

Private Shared Function GetTextOrEmpty(reader As IDataReader, fieldName As String)
    Dim ordinal = reader.GetOrdinal(fieldName)

    Return If(reader.IsDbNull(ordinal), String.Empty, reader.GetString(ordinal))
End Function

А затем, в вашем For цикле:

'Other labels (...)
Label14.Text = GetTextOrEmpty(result, "TEKUCI")
Label15.Text = GetTextOrEmpty(result, "RZZO")
'Other labels (...)

У SqlDataReader есть свой собственный метод для работы со значениями DbNull

 Label15.Text = If(result.IsDbNull(result.GetOrdinal("RZZO")), "", result("RZZO"))

Можно использовать тернарный оператор:

Label15.Text = If(result("RZZO") Is Convert.DBNull, "", result("RZZO"))