如果值在数据库中发生更改,我如何不断更新值

时间:2018-02-23 18:30:22

标签: c# mysql database wpf

我试图在WPF应用程序中实现当前登录用户的状态。我可以从数据库中读取并设置该值一次,但我需要它来继续更新。因此,例如当用户在线时,他变为忙碌。该值将在线,但是一旦它在数据库上更改为忙,该值也将更新为忙碌。

例如:

  connection = new MySqlConnection(connectionString);
  Query = "SELECT status FROM Accounts WHERE username=@username";
  connection = new MySqlConnection(connectionString);

  MySqlCommand command = new MySqlCommand(Query, connection);
  command.CommandType = System.Data.CommandType.Text;
  command.Parameters.AddWithValue("@username", thedesiredusername);
  connection.Open();
  MySqlDataReader dataReader = command.ExecuteReader();

  while (dataReader.Read())
  {
     string userstatus = dataReader.GetString("status");
  }

这会将userstatus值设置一次。我怎么能让它做这样的事情:

connection = new MySqlConnection(connectionString);
Query = "SELECT status FROM Accounts WHERE username=@username";
connection = new MySqlConnection(connectionString);

MySqlCommand command = new MySqlCommand(Query, connection);
command.CommandType = System.Data.CommandType.Text;
command.Parameters.AddWithValue("@username", thedesiredusername);
connection.Open();
MySqlDataReader dataReader = command.ExecuteReader();

while (dataReader.Read())
{
   //keep doing:
   if (userstatus != dataReader.GetString("status"))
   {
     string userstatus = dataReader.GetString("status");
   }

}

提前致谢!

2 个答案:

答案 0 :(得分:1)

如果您可以确定登录状态何时更改,或者可以识别方便检查的事件(页面加载),则事件驱动模型通常更有效。如果您没有这种奢侈品,那么您每隔一段时间就会轮询数据库以查看状态是否已更改。考虑将过滤器添加到数据库查询而不是客户端代码。

通常,数据库查询是轮询检查中最昂贵的部分。尝试通过检查新获取的匹配是否与上次检查相匹配来保存几个处理周期,并未提供任何类型的大规模性能提升。

答案 1 :(得分:0)

我现在正在使用Devart.Data.MySql包。这正是我所需要的。