如何在DataGridView中关联SQL多表,添加员工姓名列
解决方案
要实现新增员工姓名列的需求,你可以通过关联SQL查询获取工号对应的姓名,同时建议使用参数化查询修复原代码的SQL注入风险,具体修改如下:
关键调整点
- 关联存储员工信息的表(假设表名为
hr.Employees,请根据实际表名替换),通过Employee_Clock_No字段关联查询员工姓名 - 替换字符串拼接的SQL写法为参数化查询,避免安全漏洞
修改后的完整代码
Private Sub TextBox1_Leave(sender As Object, e As EventArgs) Handles TextBox1.Leave ' 使用Using语句自动管理连接和命令的释放,避免资源泄漏 Using sqlconn As New SqlClient.SqlConnection("server = ESS/SQL; Database = Maindb; integrated security=true") Dim CurSel As String = TextBox1.Text.Trim() If String.IsNullOrEmpty(CurSel) Then DataGridView1.DataSource = Nothing Return End If ' 关联查询工号和对应姓名,这里用INNER JOIN(只返回有对应姓名的记录),如果需要保留无姓名的记录,换成LEFT JOIN Dim sqlText As String = "SELECT t.Employee_Clock_No, e.Employee_Name FROM wip.WIP_Book_Trans t INNER JOIN hr.Employees e ON t.Employee_Clock_No = e.Employee_Clock_No WHERE t.WO_No = @WO_No" Using CurList3 As New SqlClient.SqlCommand(sqlText, sqlconn) ' 添加参数,避免SQL注入 CurList3.Parameters.AddWithValue("@WO_No", CurSel) sqlconn.Open() Dim dt3 As New DataTable() dt3.Load(CurList3.ExecuteReader) DataGridView1.DataSource = dt3 End Using End Using End Sub
说明
- 如果你的员工信息表不是
hr.Employees,请将SQL语句中的hr.Employees替换为实际表名 - 使用
Using语句可以自动释放数据库连接和命令资源,比手动Close更可靠 - 增加了输入空值的判断,避免空工单编号导致的查询错误
- DataGridView会自动识别查询结果中的
Employee_Clock_No和Employee_Name两列并展示
内容的提问来源于stack exchange,提问作者AlphaBravo
相关产品推荐
相关产品推荐

