2010-08-10 55 views
1

更新数据,我编写需要从数据库中的一个视图不断更新其显示的数据的应用程序。目前,它定期轮询整个数据集并重新显示它。我正在改变它以提高效率,并且对如何最有效地做到这一点人们的意见感兴趣。连续应用从数据库

应用程序是一个Windows窗体应用程序,并使用一个DataGridView来显示数据。数据库服务器是SQL Server 2008的

我一直在阅读有关SQL Server更改跟踪功能,我想知道如果这可能是相关的?任何人都可以提出任何好的方法来采取这里?我需要它来插入,更新和删除应用程序中的行,而不会影响当前选定行的状态或滚动条的位置。

谢谢!

+0

你到底有什么办法了去? – 2010-08-20 15:07:52

回答

1

最简单的方法是通过时间戳列进行查询。当你第一次运行你的应用程序时,它会查询整个数据集并记住最大的时间戳。然后它将轮询查询where timestamp > @currentTimestamp并再次记住它。

+0

有时候这个数据也会被删除,我想这将需要一个单独的表格,并且删除的行的主键也被检查。我也不是真的想继续查询数据库;我认为一旦数据发生变化,最好有一个通知。谢谢你的回答! – 2010-08-10 23:34:43

+0

@George Xyzzy得到通知是不是从数据库中的东西。你必须使用一些面向服务的方法,要么有web/wcf服务的消息总线。 – Andrey 2010-08-11 09:28:35

+0

谢谢,现在有意义 – 2010-08-11 12:48:39

0

如果我解决这个问题,我会考虑做这样:

  1. 创建SQL Server数据库项目
  2. 触发添加到项目
  3. 有类发送通知,可能使用MSMQ,给感兴趣的应用 或
  4. 查找到注册与SQL服务器级别的事件处理程序...不知道如何或是否将工作,但是从触发引发一个事件到您的应用程序将是理想

我可以得到,如果你需要更具体的,但是这是一般的方法

信息在SQL Server的项目触发器: http://msdn.microsoft.com/en-us/library/938d9dz2.aspx

+0

有趣的方法 - 所以你说,触发器可以在SQL Server本身内运行CLR代码?我将不得不看看,谢谢! – 2010-08-10 23:31:33

+0

一些链接,以帮助您入门: http://msdn.microsoft.com/en-us/library/ms254498%28VS.80%29.aspx (讨论托管在SQL Server管理CLR) HTTP ://msdn.microsoft.com/en-us/library/6s0s2at1%28v=VS.80%29.aspx (教程和您可以使用SQL服务器托管的CLR代码做例子) HTTP:/ /richarddingwall.name/2008/09/29/sql-server-2008-database-projects-in-vsts-2008/ (你需要安装此为SQL Server 2008的项目模板) HTH! – 2010-08-11 15:08:18

+0

另请注意,默认情况下禁用CLR集成...打开它,阅读这里: http://msdn.microsoft.com/en-us/library/ms254506%28v=VS.80%29.aspx – 2010-08-11 15:10:04