显示live mysql db表

vcirk6k6  于 2021-06-20  发布在  Mysql
关注(0)|答案(1)|浏览(360)

我有一个场景,其中有多个用户(一次大约50个)连接到一个表,所有用户都不断地更改已经存在的行。我需要做的是总是显示数据库的实时视图。
拥有表的缓存副本不是一个有效的选择,因为所有用户都需要立即看到所有更改。
当我第一次加载我正在使用的数据库时

mydtadp = new MySqlDataAdapter();
bindingSource1 = new BindingSource();
table = new DataTable();
MySqlConnection MyConn = new MySqlConnection(MyConnection);
MyConn.Open();

mydtadp.SelectCommand = new MySqlCommand("SELECT * FROM `Appointments`", MyConn);
cmbl = new MySqlCommandBuilder(mydtadp);

mydtadp.Fill(table);

bindingSource1.DataSource = table;
dataGridView1.DataSource = bindingSource1;

但是,当其他用户进行更改时,这并不是更新本地datagridview以反映更改。搜索完网页后,我试着设置 VirtualMode 属性设置为true。还是不走运。
接下来,我创建了一个计时器,它每秒钟会滴答一次,然后调用

dataGridView1.Refresh();

不过,当另一个用户更新数据库时,更改不会反映在本地dgv上。我发现另一篇文章建议

bindingSource1.ResetBinding(false);

我把它放在定时器的滴答功能上,仍然没有更新。
我发现一篇关于mdsn的文章建议我试着给 mydtadp.Fill(table); 在定时器功能中再次运行。同样的事情。
我唯一能做的就是保存当前选定行的索引,然后完全重新加载数据集,然后重新选择该索引。然而,这似乎很笨拙,必须有一个更好的方法来做到这一点。这种方法看起来不太好,而且效果也不太好,每当计时器滴答作响时,dgv就会闪烁,当用户移动光标时,datagridview需要几秒钟才能赶上用户。当用户对一行进行更改时,每次击键都需要一个完整的计时器来更新。

7fhtutme

7fhtutme1#

我不建议您每次都完全更新dgv,因为这会带来性能问题。
您可以将datetime列添加到mysql表中,当数据库表更新时,只需将当前datetime放入其中。在winforms应用程序中,还添加了一个变量,用于保持上次查询的日期时间。
然后,当计时器滴答作响时,您只需选择自datetime变量以来更新的那些行。
最后,分别更新dgv.datasource的相应行(我相信是这样的) System.Data.DataView )使用来自sql查询的新数据。

相关问题