保存秒表以访问数据库 vb.net

Saving a stopwatch to access database vb.net

我正在创建一个虚拟时钟,以便员工可以跟踪他们整个月的时间。用户将在屏幕上按下一个按钮,该按钮将 start/stop 计时器计时 in/out。此函数的示例代码如下:

Private CAstopwatch As New Stopwatch
Private Sub timerca_tick(sender As Object, e As EventArgs) Handles Timerca.Tick
    Dim elapsed As TimeSpan = CAstopwatch.Elapsed
    CATimer.Text = String.Format("{000:00}:{1:00}",
                                Math.Floor(elapsed.TotalHours),
                                elapsed.Minutes)

End Sub

Private Sub CAButton_Click(sender As Object, e As EventArgs) Handles CAButton.Click
    If CAButton.BackColor = Color.Silver Then
        CAButton.BackColor = Color.Red
        Timerca.Start()
        CAstopwatch.Start()
    ElseIf CAButton.BackColor = Color.Red Then
        CAButton.BackColor = Color.Silver
        Timerca.Stop()
        CAstopwatch.Stop()
    End If
End Sub

这段代码工作正常,但如果应用程序关闭,我想将信息保存到访问数据库中,以便在需要时恢复。

目前我只是通过按下按钮来测试这个以保存执行以下代码的数据

Private Sub TestButton_Click(sender As Object, e As EventArgs) Handles TestButton.Click
    'connects application to database
    Dim ConnString As String = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\DataPath\Database.accdb"
    Dim SqlString As String = "update SaintStaff set StaffHours = @CAHours, RecordedTime = @Time, RecordedDate = @Date where StaffName = @Staffname "

    'updates record in  SaintStaff table.
    Using conn As New OleDbConnection(ConnString)
        conn.Open()
        Using cmd As New OleDbCommand(SqlString, conn)
            cmd.CommandType = CommandType.Text
            cmd.Parameters.Add("@CAHours", OleDbType.VarChar).Value = CATimer.Text
            cmd.Parameters.Add("@Time", OleDbType.VarChar).Value = CurrentTime.Text
            cmd.Parameters.Add("@Date", OleDbType.VarChar).Value = CurrentDate.Text
            cmd.Parameters.Add("@Staffname", OleDbType.VarChar).Value = CAStaff.Text
            cmd.ExecuteNonQuery()
        End Using
        conn.Close()
    End Using
End Sub

我可以毫无问题地记录日期和时间,但在尝试记录计时器文本时出现 'Data type mismatch in criteria expression.' 错误。作为测试,我创建了一个新标签并将其设置为 CATimer.Text = Label.Text,因此当计时器更新时它也会更新标签。如果我更改上面的代码以保存 label.text 而不是 CATimer.text 它会起作用。显然它不喜欢记录计时器,但我不知道是什么。有人有什么想法吗?

此外,不是在按下按钮时处理此更新命令,有没有办法让它自动发生,比如每分钟一次?

谢谢

始终将日期和时间存储为 DateTime,而不是文本,并且没有理由拆分此信息。

所以,将 RecordedTime 的数据类型更改为 DateTime,跳过 _RecordedDate,并将两行替换为一行:

cmd.Parameters.Add("@Time", OleDbType.Date).Value = DateTime.Now

事实证明这是一个错误:数据库字段被设置为整数,显然不接受 .text 字段输入。我将字段类型更改为文本并已解决。