所以我有一个可以在多个客户端上运行的应用程序,每个客户端都访问中央服务器以获取数据。在客户端应用程序上,用户需要使用其凭据登录才能访问该程序。我将在线用户存储在我的数据库中的表中。我目前管理在线用户的方法如下:
用户登录并将其记录插入数据库的在线表中
MySqlConnection connection1 = new MySqlConnection(Class1.connString);
MySqlCommand command = connection1.CreateCommand();
command.CommandText = "INSERT INTO online (ComputerIP, ComputerName, Username, Time) " + "VALUES (@ip, @compname, @user, @datetime)";
command.Parameters.AddWithValue("@ip", getIP().NullString());
command.Parameters.AddWithValue("@compname", GetFQDN().NullString());
command.Parameters.AddWithValue("@user", user);
command.Parameters.AddWithValue("@datetime", DateTime.Now);
connection1.Open();
command.ExecuteNonQuery();
connection1.Close();
一旦他们退出或退出应用程序,就会运行代码从表中删除此记录。
MySqlConnection conn = new MySqlConnection(Class1.connString);
conn.Open();
MySqlCommand command = new MySqlCommand("DELETE FROM online WHERE ID='" + userID + "'", conn);
MySqlDataReader Reader1 = command.ExecuteReader();
conn.Close();
但是,如果用户要错误地关闭程序(结束任务,强行关闭计算机,断电),则不会执行删除此记录的代码,因此尽管没有记录,用户仍然保持登录状态上。
我该如何处理这些情况?我的方法是否实用或者有更好的解决方案吗?
答案 0 :(得分:0)
我看不出你怎么能绕过它,但也许你应该解释一下你想要实现的目标?如果您只想知道当前登录的用户是否可以从INFORMATION_SCHEMA.PROCESSLIST视图中获得所需内容?当出于某种原因关闭连接时,这应该更新。