我有一个程序可以检索学生和班级信息。
我已经使用if (!reader.HasRows)
检查学生是否存在,但问题并非所有学生都已在某个班级注册,我希望它继续检索数据,即使班级信息中的值为空。我是C#的新手,非常感谢任何帮助和推荐。
private void btnstudsearch_Click_1(object sender, EventArgs e)
{
SqlConnection con = new SqlConnection(@"data source = DELL-USER\SQLEXPRESS;integrated security = SSPI;database = Enrollment System");
DataTable dt = new DataTable();
con.Open();
SqlDataReader reader = null;
SqlCommand cmd = new SqlCommand("select tbl_studregs.fname, tbl_studregs.mname, tbl_studregs.lname, tbl_studregs.age, tbl_studregs.sex,
tbl_studregs.address, tbl_studregs.gname, tbl_studregs.gcnum, tbl_studregs.educlevel, tbl_class.yglevel, tbl_class.section from tbl_studregs
inner join tbl_class on tbl_studregs.classid = tbl_class.classid where tbl_studregs.studid = @id ", con);
cmd.Parameters.AddWithValue("@id", txtstudsearch.Text);
reader = cmd.ExecuteReader();
if (!reader.HasRows)
{
MessageBox.Show("Student not found! Please recheck the student ID!", "", MessageBoxButtons.OK, MessageBoxIcon.Information);
ClearAllTextBox();
}
else
{
while (reader.Read())
{
txtstudfname.Text = reader.GetValue(0).ToString();
txtmname.Text = reader.GetValue(1).ToString();
txtstudlname.Text = reader.GetValue(2).ToString();
txtage.Text = reader.GetValue(3).ToString();
cboxsex.Text = reader.GetValue(4).ToString();
rtxtaddress.Text = reader.GetValue(5).ToString();
txtgname.Text = reader.GetValue(6).ToString();
txtgcnum.Text = reader.GetValue(7).ToString();
cboxstudlevel.Text = reader.GetValue(8).ToString();
txtstudyearlev.Text = reader.GetValue(9).ToString();
txtstudsec.Text = reader.GetValue(10).ToString();
}
}
}
答案 0 :(得分:1)
如果我理解正确,即使在tbl_class表上没有连接到类的类,也要检索学生的信息。我想大多数人都可以查看difference between different SQL join operations。
看起来你想要的是left join
而不是SQL查询中的inner join
,尽管它可能取决于你的数据库是什么样的。