VB.NET如何实现登录登出日志历史记录并保存至MySQL数据库
首先你需要先完成2项前置准备:
- 给
logsrecord表新增一个LoggedOut字段,字段类型与LoggedIn一致,设为VARCHAR即可,用于存储登出时间 - 存储当前登录的用户名,方便登出时定位对应日志记录:你可以在跳转的Form3代码顶部定义公共变量,代码如下:
' 写在Form3代码的最上方,所有Sub之外 Public CurrentLoginUsername As String
然后修改你原有登录代码里的跳转逻辑,给这个变量赋值:
' 原有逻辑里的Form3.Show()之前加这行 Form3.CurrentLoginUsername = Username.Text Form3.Show() Me.Hide()
接下来是登出按钮的代码,逻辑为更新对应用户当天最新的未填写登出时间的日志记录,写入当前登出时间:
Private Sub Button_Logout(sender As Object, e As EventArgs) Handles Button_Logout.Click ' 可选:增加登出确认 If MessageBox.Show("确认要登出吗?", "登出提示", MessageBoxButtons.YesNo) <> DialogResult.Yes Then Exit Sub End If Using con As New MySqlConnection("server=localhost;username=root;password=;database=logsrecord"), cmd As New MySqlCommand("UPDATE loghistory.logsrecord SET LoggedOut = @LoggedOut WHERE Username = @Username AND Date = @Date AND LoggedOut IS NULL ORDER BY LoggedIn DESC LIMIT 1", con) cmd.Parameters.Add("@Username", MySqlDbType.VarChar).Value = CurrentLoginUsername cmd.Parameters.Add("@Date", MySqlDbType.VarChar).Value = DateTime.Now.ToString("MMM-dd-yyyy") cmd.Parameters.Add("@LoggedOut", MySqlDbType.VarChar).Value = TimeOfDay.ToString("hh:mm:ss") con.Open() cmd.ExecuteNonQuery() End Using ' 登出后回到登录页逻辑 Me.Close() Form1.Show() ' 替换为你实际的登录窗体名称 End Sub
补充优化建议
- 建议将表中
Date、LoggedIn、LoggedOut字段替换为MySQL的DATETIME类型存储,不需要手动转字符串,后续统计用户登录时长、筛选跨天登录记录会更方便 - 可以在窗体的
FormClosing事件中也加入上述登出逻辑,避免用户直接关闭窗体没有点击登出按钮导致登出时间缺失
内容的提问来源于stack exchange,提问作者melen
相关产品推荐
相关产品推荐

