如何在ASP.Net 3.5中更改db表中的记录时刷新页面

时间:2009-09-17 07:50:02

标签: asp.net sql-server-2005

我有一个页面,其中包含一个Gridview,显示来自db表的记录,例如“tblEmployee”。 如果在该表中插入/更新/删除了一条记录,那么我需要重新加载我的页面,以便gridview显示更新的记录。可以从任何其他应用程序插入/更新/删除记录。 要重新绑定gridview,我必须重新加载页面。假设我在浏览器中打开页面并且没有回发。 10分钟后,其他一些应用程序会在表格中插入一条记录。如何在db表中的记录更改时单击刷新按钮,而不是手动重新加载页面?我使用Sql server 2005作为DB和ASP.Net 3.5(C#)

请建议如何实施。

感谢。

3 个答案:

答案 0 :(得分:2)

这里有两种方法......一种使用触发器,另一种使用SqlDependency。我建议使用SqlDependency,但我要概述另一种方法,因为你指出了SqlDependency的问题。

创建一个包含表名和上次更新日期列的表。在tblEmployee上创建一个触发器,以便在任何insert / update / delete上更新该表。

加载页面时,您需要存储表格的当前上次更新日期。根据页面的设置方式,您可以将其存储在ViewState中或作为页面上的隐藏字段存储。然后,您需要轮询更改。有很多方法可以做到这一点。您可以编写一个简单的页面方法,它返回上次更新日期,从JavaScript调用它,并将其与您在隐藏字段中存储的日期进行比较。或者,您可以将UpdatePanel与Timer控件一起使用,并与存储在ViewState中的值进行比较。

现在,这种方法对数据库的访问超出了必要的范围。如果这是一个问题,请在SQL 2005或更高版本中使用SqlDependency。创建一个SqlDependency并使用此依赖项对象将当前日期插入到Cache中。如上所述,从页面轮询此缓存项。当依赖项更改(OnChange事件)时,再次更新缓存项目日期。

答案 1 :(得分:1)

您可以使用SqlDependency类:

以下是一个入门示例:SqlDependency in an ASP.NET Application (ADO.NET)

答案 2 :(得分:1)

我没有看到其他选项,即使用轮询机制,即使用setTimeout + jQuery或ASP.NET AJAX Timer来定期提取信息。

基本上,您希望服务器通知客户端已发生更新,并且Web / ASP.NET应用程序通信始终由客户端启动。所以投票是你唯一的选择。