如何将SQLite数据库查询结果加载至文本框——排班系统开发需求
解决员工合同工时加载到TextBox的问题
嘿,我来帮你把这段代码补全并优化一下,搞定员工合同工时的加载和显示问题~
1. 完善GetContractedHours方法
首先要修正原代码里的SQL注入风险(直接拼接用户输入是很危险的操作),同时补全数据加载的逻辑,还加上异常处理保证程序稳定性:
Sub GetContractedHours() ' 初始化SQL语句,用参数占位符替代直接拼接 Dim sSql As String = "SELECT emp_contractedhours FROM Employee WHERE emp_fn LIKE @EmpName" Dim contractedHours As String = String.Empty ' 使用Using语句自动释放数据库资源(推荐写法,避免连接泄漏) Using con As New SQLiteConnection(ConnectionString) Using cmd As New SQLiteCommand(sSql, con) ' 添加参数,彻底避免SQL注入 cmd.Parameters.AddWithValue("@EmpName", cboEmpName.Text & "%") Try ' 打开数据库连接 con.Open() ' 执行查询并获取单个结果(因为我们只查一个字段) Dim result As Object = cmd.ExecuteScalar() If result IsNot DBNull.Value Then contractedHours = result.ToString() Else contractedHours = "未找到对应工时" ' 没有匹配员工时的提示 End If Catch ex As Exception ' 捕获异常并给出提示(可根据实际需求调整处理逻辑) MessageBox.Show("加载工时失败:" & ex.Message) contractedHours = "加载失败" Finally ' 确保连接关闭(Using语句会自动处理,这里显式写更稳妥) If con.State = ConnectionState.Open Then con.Close() End If End Try End Using End Using ' 将结果显示到目标TextBox txtContractedHours.Text = contractedHours End Sub
2. 绑定ComboBox的触发事件
你需要把这个方法和ComboBox的选中事件绑定,这样用户选中员工时会自动触发数据加载:
Private Sub cboEmpName_SelectedIndexChanged(sender As Object, e As EventArgs) Handles cboEmpName.SelectedIndexChanged ' 确保ComboBox有选中项时才执行 If cboEmpName.SelectedIndex <> -1 Then GetContractedHours() End If End Sub
额外小提示
- 参数化查询的必要性:直接拼接用户输入会留下SQL注入漏洞,参数化查询能彻底规避这个安全问题。
- Using语句的优势:自动释放数据库连接、命令等资源,不用手动调用Dispose,减少资源泄漏风险。
- 空值处理:查询结果可能为DBNull,一定要先判断再赋值,避免程序报错。
内容的提问来源于stack exchange,提问作者Ridge
相关产品推荐
相关产品推荐

