C#Mysql客户端服务器应用程序。我该如何管理在线用户?

时间:2015-11-13 12:36:52

标签: c# mysql winforms

所以我有一个可以在多个客户端上运行的应用程序,每个客户端都访问中央服务器以获取数据。在客户端应用程序上,用户需要使用其凭据登录才能访问该程序。我将在线用户存储在我的数据库中的表中。我目前管理在线用户的方法如下:

用户登录并将其记录插入数据库的在线表中

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();

但是,如果用户要错误地关闭程序(结束任务,强行关闭计算机,断电),则不会执行删除此记录的代码,因此尽管没有记录,用户仍然保持登录状态上。

我该如何处理这些情况?我的方法是否实用或者有更好的解决方案吗?

1 个答案:

答案 0 :(得分:0)

我看不出你怎么能绕过它,但也许你应该解释一下你想要实现的目标?如果您只想知道当前登录的用户是否可以从INFORMATION_SCHEMA.PROCESSLIST视图中获得所需内容?当出于某种原因关闭连接时,这应该更新。