我正在尝试从连接表中收集数据,目前显示空值(未找到错误)。我认为我的代码效率不高。但这就是我正在尝试的事情:
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'。
我想每个人都会通过查看代码来理解。我无法解释,因为我的英语不够好。
答案 0 :(得分:0)
... from tabsen join tsiswa on ...
这会在两个表上生成Inner Join,如果两个表都有匹配的数据,则只会提供结果。
... from tabsen right join tsiswa on ...
... 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
。会给你一些编译错误,但将来会为你节省很多错误。