VB.NET表单仅关闭重开后才更新数据问题求助
问题根源与解决方向
核心问题
你的代码中本地DataTable未与数据库更新同步,且ShowData方法每次调用时会重复向DataTable追加数据,导致切换标签页后读取的仍是旧数据。
具体解决方向
1. 更新数据库后同步本地DataTable
执行完UPDATE语句并确认成功后,直接修改类级别的table中对应行的数据,确保本地缓存与数据库一致:
If rowsAffected > 0 Then MessageBox.Show("Data Updated Succesfully") ' 同步本地DataTable的对应行 table.Rows(Index)(1) = TxtStaffFirstName.Text table.Rows(Index)(2) = TxtStaffLastName.Text table.Rows(Index)(3) = TxtStaffAddress.Text table.Rows(Index)(4) = TxtStaffCity.Text table.Rows(Index)(5) = TxtStaffState.Text Else MessageBox.Show("Data UNSUCCESFULLY Updated") End If
2. 修复ShowData方法,避免数据追加
每次调用ShowData时,先清空DataTable再重新从数据库加载,确保每次读取的都是最新数据:
Private Sub ShowData(Position As Integer) Con.Close() Dim Cmd As New SqlCommand("Select * From Staff", Con) Dim adaptor As New SqlDataAdapter(Cmd) ' 清空旧数据,避免重复追加 table.Clear() adaptor.Fill(table) TxtStaffID.Text = table.Rows(Position)(0).ToString() TxtStaffFirstName.Text = table.Rows(Position)(1).ToString() TxtStaffLastName.Text = table.Rows(Position)(2).ToString() TxtStaffAddress.Text = table.Rows(Position)(3).ToString() TxtStaffCity.Text = table.Rows(Position)(4).ToString() TxtStaffState.Text = table.Rows(Position)(5).ToString() Con.Close() End Sub
3. 处理标签页切换事件,强制刷新数据
如果表单位于TabControl的标签页中,监听标签页切换事件,当切回该表单所在标签时,重新调用ShowData(Index)获取最新数据:
Private Sub TabControl1_SelectedIndexChanged(sender As Object, e As EventArgs) Handles TabControl1.SelectedIndexChanged ' 假设当前表单在索引为0的标签页,根据实际情况修改索引值 If TabControl1.SelectedIndex = 0 Then ShowData(Index) End If End Sub
额外优化建议
- 使用
Using语句管理数据库连接和命令对象,避免资源泄漏:
Using Con As New SqlConnection("你的连接字符串") Using cmd As New SqlCommand("UPDATE语句", Con) ' 执行数据库操作 End Using End Using
- 替代
AddWithValue,明确指定参数类型,避免潜在的类型转换问题:
cmd.Parameters.Add("@staffID", SqlDbType.VarChar).Value = TxtStaffID.Text
内容的提问来源于stack exchange,提问作者Kevin
相关产品推荐
相关产品推荐

