VB.Net) с использованием считывателя данных условий в таблицах соединений
Я пытаюсь собрать данные из присоединяющейся таблицы, и в настоящее время отображается нулевое значение (ошибка не найдена). Я думаю, что мой код недостаточно эффективен. Но вот что я пытаюсь:
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".
Я думаю, что все поймут, посмотрев код. Я не могу объяснить многое, потому что мой английский недостаточно хорош.
1 ответ
... from tabsen join tsiswa on ...
Это создает внутреннее объединение для двух таблиц, которое дает результаты только в том случае, если обе таблицы имеют совпадающие данные.
Используйте либо Right (Outer) Join
... from tabsen right join tsiswa on ...
Или левый (внешний)
... from tsiswa left join tabsen on ...
Сказав это, имейте в виду, что если tabsen
не содержит совпадающих строк, все его атрибуты NULL
ценности.
Таким образом, вы должны проверить это при назначении значений из заголовка данных в текстовые поля:
Dim id_absen = dr.Item("id_absen")
txtid.Text = If(id_absen<> DBNull.Value, id_absen.ToString(), String.Empty)
...
Кстати... я бы порекомендовал вам установить Option Strict On
в самом верху вашего файла VB. Даст вам некоторые ошибки компиляции, но избавит вас от множества ошибок в будущем.