Mengatasi Error DBNull VB.NET

Para sobat programmer VB.Net mungkin pernah mengalami error seperti dibawah ini ketika melakukan load data dari database dan ingin menampilaknya di form:

‘text’ cannot convert from ‘DBNull’ to ‘String’.

Atau seperti ini:

‘item’ cannot convert from ‘DBNull’ to ‘ListViewSubItem’.

Kesalahan diatas terjadi karena di saat kita akan meload data dari tabel dan ingin menampilkannya ada kolom dari tabel yang berisi Null. Value Null ini akan terjadi apabila pada saat mendesain tabel kita memberikan option Allow Nullls pada kolom. Seperti gambar dibawah ini:

Allow Nulls

Nulls Value

Untuk mengatasi masalah diatas berikut saya sharing triknya, ada beberapa cara untuk mengatasinya. Seperti contoh gambar di atas misalkan kita mempunya tabel MsKota dengan beberapa kolom di bolehkan Null.

Cara I: Melalui Query dengan memanfaatkan fungsi ISNULL.

Dengan menggunakan fungsi ISNull kita bisa mereplace semua kolom yang mempunyai value Null menjadi karakter tertentu sehingga ketika hasil query tersebut ditampilkan maka tidak ada lagi value Null. Contoh:

SELECT ID, ISNULL(Nm_Kota,'') AS [Nama Kota], ISNULL(Nm_Propinsi,'') AS [Nama Propinsi]
FROM MsKota

Dari contoh query diatas saya mereplace value Null menjadi karakter ‘ ‘, Kita bisa mereplace dengan tulisan apa saja tidak harus karakter kosong seperti contoh diatas misalnya dengan ‘Null Value’, dan lain sebagainya.

Contoh penggunaannya di VB.NET:

Sub tampilData()
        Dim con As New SqlConnection("Data Source=SKY;Initial Catalog=TES;Integrated Security=True")
        Dim cmd As SqlCommand
        Dim reader As SqlDataReader

        con.Open()
        cmd = New SqlCommand("SELECT ID, ISNULL(Nm_Kota,'') AS [Nama Kota], ISNULL(Nm_Propinsi,'') AS [Nama Propinsi] FROM MsKota", con)
        reader = cmd.ExecuteReader
        If reader.HasRows Then
            reader.Read()
            txtID_Kota.Text = reader("ID").ToString
            txtNm_Kota.Text = reader("Nama Kota").ToString
            txtNm_Propinsi.Text = reader("Nama Propinsi").ToString
        End If
        con.Close()
        cmd.Dispose()
        reader.Close()
End Sub

Catatan: Fungsi diatas untuk database Microsoft SQL Server, untuk database lain mungkin bisa berbeda fungsi.

Cara II: Melalui VB.NET dengan memanfaatkan DBNULL.Value

Dengan DBNULL.Value kita bisa melakukan pengecekan value apakah Null atau tidak sebelum ditampilkan. contoh penggunaannya:

Sub tampilData()
Dim con As New SqlConnection("Data Source=SKY;Initial Catalog=TES;Integrated Security=True")
Dim cmd As SqlCommand
Dim reader As SqlDataReader

con.Open()
cmd = New SqlCommand("SELECT ID, Nm_Kota, Nm_Propinsi FROM MsKota", con)
reader = cmd.ExecuteReader
If reader.HasRows Then
reader.Read()
txtID_Kota.Text = IIf(reader("ID") Is DBNull.Value, "", reader("ID").ToString)
txtNm_Kota.Text = IIf(reader("Nm_Kota") Is DBNull.Value, "", reader("Nm_Kota").ToString)
txtNm_Propinsi.Text = IIf(reader("Nm_Propinsi") Is DBNull.Value, "", reader("Nm_Propinsi").ToString)
End If
con.Close()
cmd.Dispose()
reader.Close()
End Sub

Cara III: Melalui VB.NET dengan memanfaatkan fungsi IsDBNull

Dengan menggunakan fungsi IsDBNull kita bisa melakukan pengecekan value apakah Null atau tidak sebelum ditampilkan. contoh penggunaannya:

Sub tampilData()
Dim con As New SqlConnection("Data Source=SKY;Initial Catalog=TES;Integrated Security=True")
Dim cmd As SqlCommand
Dim reader As SqlDataReader

con.Open()
cmd = New SqlCommand("SELECT ID, Nm_Kota, Nm_Propinsi FROM MsKota", con)
reader = cmd.ExecuteReader
If reader.HasRows Then
reader.Read()
txtID_Kota.Text = IIf(IsDBNull(reader("ID")) = True, "", reader("ID").ToString)
txtNm_Kota.Text = IIf(IsDBNull(reader("Nm_Kota")) = True, "", reader("Nm_Kota").ToString)
txtNm_Propinsi.Text = IIf(IsDBNull(reader("Nm_Propinsi")) = True, "", reader("Nm_Propinsi").ToString)
End If
con.Close()
cmd.Dispose()
reader.Close()
End Sub

Demikian Tip dari saya, Selamat mencoba.., Semoga bermanfaat.

2 Responses to “Mengatasi Error DBNull VB.NET”

  1. hriz Says:

    tq ilmuNa gan.
    Tapi ada yg mau ane tanyain, code ‘DBNULL.Value’ maupun ‘IsDBNull’ tu knp tidak bisa diterapin di datarow maupun di LINQ (Disconnected Programming) ?

    ini code ane :
    Dim drSupp As dstMST.t_supplierRow ‘Deklarasi data row table t_supplier

    ‘Event txtKode.keydown :
    drSupp = dstMSTTIS.t_supplier.FindBycsuppcode(txtKodeSupp.Text.Trim.PadRight(10, ” “))

    txtKodeSupp.Text = drSupp.csuppcode
    txtNamaSupp.Text = drSupp.cNama
    If drSupp.cAlamat1 Is DBNull.Value Then
    txtAlamatSupp.Text = drSupp.cAlamat1
    Else
    txtAlamatSupp.Text = “”
    End If

    • Suprie Says:

      dari kodenya sih gak ada yang salah, emang gak bisanya gimana gan??
      kalo pakai fungsi yang IsDBNull sama aja ya misalnya kayak gini:

      if (not IsDBNull(drSupp.cAlamat1)) then
      txtAlamatSupp.Text = drSupp.cAlamat1
      else
      txtAlamatSupp.Text = “”
      end if


Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s

%d bloggers like this: