VB.Net)在连接表上使用条件数据读取器

时间:2017-03-20 17:26:20

标签: mysql vb.net mysqldatareader

我正在尝试从连接表中收集数据,目前显示空值(未找到错误)。我认为我的代码效率不高。但这就是我正在尝试的事情:

conn.Open()
    sqlcmd = New MySqlCommand("select tabsen.id_absen, tsiswa.NIS, tsiswa.nama, tabsen.alpa, tabsen.izin, tabsen.sakit, tabsen.tahun_ajaran from tabsen join tsiswa on tabsen.NIS = tsiswa.NIS where tsiswa.NIS like '%" & txtnis.Text & "%'", conn)
    dr = sqlcmd.executereader()
    dr.Read()
    If dr.HasRows Then

        txtid.Text = dr.Item("id_absen")
        txtnis.Text = dr.Item("NIS")
        txtnama.Text = dr.Item("nama")
        txta.Text = dr.Item("alpa")
        txti.Text = dr.Item("izin")
        txts.Text = dr.Item("sakit")
        cmbtahun.Text = dr.Item("tahun_ajaran")
        txta.Focus()
        btnsave.Text = "UPDATE"
        btndelete.Enabled = True
        txtjumlah.Enabled = True
        cmbpredikat.Enabled = True
        cmbtahun.Enabled = True
        txtnis.Enabled = False
        dr.Close()

    Else
        While dr.Read()
            txtnama.Text = dr("nama")
        End While
        dr.Close()
        MsgBox("data absensi belum diisi")
    End If
    conn.Close()

如果找到行,它就像一个魅力。但是当它在表格'tabsen'上空时,没有错误,但txtnama.Text没有显示他们的'nama'。

the problem

我想每个人都会通过查看代码来理解。我无法解释,因为我的英语不够好。

1 个答案:

答案 0 :(得分:0)

... from tabsen join tsiswa on ...

这会在两个表上生成Inner Join,如果两个表都有匹配的数据,则只会提供结果。

使用Right (Outer) Join

... from tabsen right join tsiswa on ...

Left (Outer) Join

... from tsiswa left join tabsen on ...

话虽如此,请注意,如果tabsen不包含匹配的行其所有属性为NULL值。
因此,在将值从datareader分配给文本框时,您必须检查:

Dim id_absen = dr.Item("id_absen") 
txtid.Text = If(id_absen<> DBNull.Value, id_absen.ToString(), String.Empty)
...

顺便说一下......我建议你在VB文件的最顶部设置Option Strict On。会给你一些编译错误,但将来会为你节省很多错误。