You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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

说明

  1. 如果你的员工信息表不是hr.Employees,请将SQL语句中的hr.Employees替换为实际表名
  2. 使用Using语句可以自动释放数据库连接和命令资源,比手动Close更可靠
  3. 增加了输入空值的判断,避免空工单编号导致的查询错误
  4. DataGridView会自动识别查询结果中的Employee_Clock_No和Employee_Name两列并展示

内容的提问来源于stack exchange,提问作者AlphaBravo

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.13 23:20:37