Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/333.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如果某个值在数据库中发生更改,如何持续更新该值_C#_Mysql_Database_Wpf - Fatal编程技术网

C# 如果某个值在数据库中发生更改,如何持续更新该值

C# 如果某个值在数据库中发生更改,如何持续更新该值,c#,mysql,database,wpf,C#,Mysql,Database,Wpf,我试图在WPF应用程序中实现当前登录用户的状态。我可以从数据库中读取并设置该值一次,但我需要它来不断更新。例如,当一个用户在线时,他变为忙碌。该值将处于联机状态,但一旦它在数据库上更改为busy,该值也将更新为busy 例如: connection = new MySqlConnection(connectionString); Query = "SELECT status FROM Accounts WHERE username=@username"; connection = n

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

例如:

  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");
   }

}

提前谢谢

如果您可以识别登录状态何时更改,或者可以识别便于检查的事件(页面加载),则事件驱动模型通常更有效。如果您没有这种奢侈,那么您就需要每隔一段时间轮询一次数据库,看看状态是否发生了变化。考虑将过滤器添加到数据库查询中,而不是客户端代码。
通常,数据库查询是轮询检查中最昂贵的部分。试图通过检查新获取的数据是否与上次检查相匹配来节省几个处理周期,并不能提供任何大规模的性能提升。

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

查找SQL依赖项您还可以拥有一台管理所有状态的服务器。我正在查找它。@DanielA.White,所以我尝试了sqldependency,但无法将其连接到mysql数据库。出于某种原因,它说连接字符串无效,即使我已经用多种方法验证了它是有效的。有mssql依赖项和mysql依赖项-确保使用正确的。好的,谢谢。我会看看我是否能在明天做第一件事。投票会起作用,但会让人感到有点痛苦,因为这会让程序一点也不顺利。我忘了提到这是WPF项目。如果您可以确定登录状态何时更改或可以确定便于检查的事件(页面加载),那么“1否决票接受”是什么意思?