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

VB.NET秒表数据存入Access数据库报错及定时自动保存实现方法

问题解答

数据类型不匹配报错的解决思路

  • 首先校验文本异常:直接对CATimer.Text做 Trim 处理清除不可见空白/控制字符再写入,修改参数赋值代码为:
    cmd.Parameters.Add("@CAHours", OleDbType.VarChar).Value = CATimer.Text.Trim()
    
    绝大多数该类报错都是因为计时控件更新文本时附带了不可见字符,额外的Label赋值时相当于做了一次清洗所以能正常写入。
  • 确认控件与字段类型匹配:
    1. 检查CATimer控件确实是文本显示类控件(Label/TextBox),不要和系统自带的Timer计时控件混淆,确保其Text属性就是你要存储的时长文本
    2. 确认Access中SaintStaff表的StaffHours字段类型和你传入的参数类型一致:如果该字段设为数值/时间类型,不要直接传字符串,先把时长文本转成对应类型再写入,比如转成总分钟数的整数,或者转成TimeSpan类型传入,后续统计工时也更方便。
  • 注意OleDb参数匹配规则:OleDb不支持命名参数匹配,完全按照参数添加的顺序和SQL语句中占位符的顺序一一对应,不要随意调整参数的Add顺序,否则也会触发类型不匹配报错。

每分钟自动执行更新的实现方法

直接新增一个独立的Timer控件实现定时触发即可,步骤如下:

  1. 在窗体设计器中添加新的System.Windows.Forms.Timer控件,命名为AutoSaveTimer,将其Interval属性设置为60000(单位为毫秒,60000ms=1分钟)
  2. 给AutoSaveTimer添加Tick事件处理,将你现有TestButton_Click中的数据库保存逻辑完整复制到该Tick事件中即可,可额外加运行状态判断减少无用数据库请求:
Private Sub AutoSaveTimer_Tick(sender As Object, e As EventArgs) Handles AutoSaveTimer.Tick
    ' 仅计时运行时更新数据,可根据需求调整判断条件
    If CAstopwatch.IsRunning Then
        ' 此处复制原有TestButton_Click中的数据库更新代码
    End If
End Sub
  1. 在窗体加载事件中启动该计时器即可:
Private Sub MainForm_Load(sender As Object, e As EventArgs) Handles MyBase.Load
    AutoSaveTimer.Start()
End Sub
  • 额外补充:如果需要应用关闭时强制保存最新数据,直接在窗体的FormClosing事件中调用一次相同的保存逻辑即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 12:15:04