我计划用C#编写一个应用程序,它一次只允许一个登录用户连接。我的SQL数据库中有一个名为LoggedOn的bit
列,登录时我会检查数据库是否显示loggedon = true
,例如。
if (Loggedon == true) {
//Login things
} else {
//it appears you are already logged on.
}
如果我的程序意外关闭,我的问题是什么?
例如:强制关闭或任务管理器结束进程,如何在有人这样做之前运行查询以防止对我的数据库进行任何更改。
我不确定我是否已经解释得这么好但是我的代码
protected override void Dispose(bool disposing)
{
if (disposing && (components != null))
{
components.Dispose();
}
string myConnection = "******;";
MySqlConnection conn = new MySqlConnection(myConnection);
conn.Open();
MySqlCommand comm = conn.CreateCommand();
comm.CommandText = "INSERT INTO users LoggedOn = 'False' where username = '" + Form1.TextBoxText + "'";
comm.ExecuteNonQuery();
conn.Close();
base.Dispose(disposing);
}
此代码是否涵盖所有意外关闭?有没有其他简单快捷的方法可以做到这一点?
事件处理程序会解决我的问题吗?比如这样: http://msdn.microsoft.com/en-us/library/system.appdomain.unhandledexception.aspx
答案 0 :(得分:1)
除了单例和Loggedon持久性之外,以下内容将有助于解决应用程序崩溃的情况:
如果您希望在数据库中保留Loggedon以确保用户未从世界上任何其他位置登录到系统,您可以使用心跳计时器来更新Loggedon的值。因此,客户端将在几分钟内更新数据库以指示用户仍然登录。这将处理应用程序崩溃的情况。
还有其他方法:如果用户再次登录,您可以注销用户的所有其他会话。或者你可以有一个看门狗定时器而不是心跳 - 非常相似,但看门狗基本上确保长时间运行的会话非常活跃