使用windows应用程序c#更新基于用户活动的数据库表字段

本文关键字:活动 用户 数据库 字段 应用程序 windows 更新 于用户 使用 | 更新日期: 2023-09-27 18:10:45

我在windows应用程序中创建了一个项目,我为该项目提供了多个用户的可访问性,但我需要将其限制为一次只有3个用户访问它。为此,我添加了列状态(位),对于每次登录我做了status=true和注销status=false,但如果我从结束任务和系统关闭结束了我的项目,那么我在计数登录用户时遇到了问题。

是否有可能找到活跃用户和他们的状态?如果可能的话,我将每5分钟运行一次trigger,并相应地更新状态字段。

使用windows应用程序c#更新基于用户活动的数据库表字段

好了,既然这是一个Windows应用程序,你还没有提供任何代码,我将在他们登录时做这样的事情:

// connect to the database
using (SqlConnection c = new SqlConnection("connection string"))
{
    // count the logged in users
    var loggedInUsers = (int)new SqlCommand("SELECT COUNT(UserId) FROM Users WHERE status = 1", c).ExecuteScalar();
    // if the threshold has been met then shut down the application
    if (loggedInUsers == 3)
    {
        MessageBox.Show("There are already 3 concurrent users logged into the system -please try again at a later time.", "User Limit Met", MessageBoxButtons.OK, MessageBoxIcon.Information);
        Application.Exit();
    }
}

但是你也必须在应用程序关闭时这样做,就像在主表单的OnClosing方法:

protected override void OnClosing(CancelEventArgs e)
{
    // connect to the database
    using (SqlConnection c = new SqlConnection("connection string"))
    {
        // log the user out
        var cmd = new SqlCommand("UPDATE Users SET status = 0 WHERE UserId = @UserId", c);
        cmd.Parameters.AddWithValue("@UserId", // get your user id from somewhere
        var rowsAffected = cmd.ExecuteNonQuery();
        // make sure the update worked
        if (rowsAffected == 0)
        {
            // do something here to make sure they get logged out
        }
    }
}
<标题>编辑

要处理在任务管理器退出期间应用程序失败的边缘情况,例如,您应该能够利用Application.Exit,因此在启动方法中(即调用Application.Run的地方)将这一行放在前面:

Application.ApplicationExit += new EventHandler(Application_ApplicationExit);

,然后消费它:

private void Application_ApplicationExit(object sender, EventArgs e)
{
    // and now you can probably just move all of the code here
    // instead of the OnClosing
}