Asp.NET DataList控件展示两个数据库表关联数据的实现方案咨询
核心实现思路
- 直接用
JOIN联表查询一次拿到两张表的所有需要字段,避免循环查库的性能损耗,也省去手动拼接数据的麻烦 - 把查询到的整合后的数据集直接绑定到DataList即可,你前端写的
Eval绑定字段已经符合要求,只要数据源里有对应字段就能正常渲染
原有代码的核心问题
- 循环内重复查询数据库,且误用命令对象:执行
oleCom2时你调用了oleCom1.ExecuteReader(),拿到的还是申请表的数据,根本没有查询求职者信息表 - 循环内反复给DataList绑定数据源,最后又重新绑定了申请表的读取器,会覆盖前面的所有操作,最终数据源里没有姓名字段,前端绑定必然报错
- 没有释放数据库连接资源,存在连接泄漏风险
修正后的后台代码
string CS = ConfigurationManager.ConnectionStrings["ConnectionString"].ConnectionString; // 联表查询一次拿全所有需要的字段,如果jobLocation在求职者表,就改成s.jobLocation string sql = @"SELECT a.jobSeekerID, a.jobPosition, a.jobIndustry, a.jobLocation, s.firstName, s.lastName FROM SeekerJobApplication a INNER JOIN JobSeeker s ON a.jobSeekerID = s.jobSeekerID WHERE a.postingID = 0"; using (OleDbConnection conn = new OleDbConnection(CS)) { using (OleDbCommand cmd = new OleDbCommand(sql, conn)) { conn.Open(); OleDbDataReader dr = cmd.ExecuteReader(); applicationsDataList.DataSource = dr; applicationsDataList.DataBind(); } }
可选补充方案(特殊场景无法联表查询时使用)
如果有业务限制不能用联表查询,可以先把申请表数据填充到DataTable,再遍历DataTable的行,根据jobSeekerID查询用户表补全firstName和lastName字段,最后把整合后的DataTable绑定到DataList即可,性能远高于循环访问数据库。
内容的提问来源于stack exchange,提问作者notGoodAtThis
相关产品推荐
相关产品推荐

