代码之家  ›  专栏  ›  技术社区  ›  Ruben Versavel

如果数据库中的值发生更改,如何持续更新该值

  •  0
  • Ruben Versavel  · 技术社区  · 8 年前

    我试图在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 回复  |  直到 8 年前
        1
  •  1
  •   user3112728    8 年前

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

    通常,数据库查询是轮询检查中最昂贵的部分。试图通过检查新获取的数据是否与上次检查匹配来节省几个处理周期,并不能提供任何形式的大规模性能提升。

        2
  •  0
  •   Ruben Versavel    8 年前

    我现在正在使用Devart。数据MySql包。这正是我需要的。