【问题标题】:How to refresh a page when record in db table get changed in ASP.Net 3.5如何在 ASP.Net 3.5 中更改数据库表中的记录时刷新页面
【发布时间】:2009-09-17 07:50:01
【问题描述】:

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

请建议如何实施。

谢谢。

【问题讨论】:

    标签: asp.net sql-server-2005


    【解决方案1】:

    这里有两种方法...一种使用触发器,另一种使用 SqlDependency。我建议使用 SqlDependency,但我正在概述另一种方法,因为您指出 SqlDependency 存在问题。

    创建一个包含表名和上次更新日期列的表。在 tblEmployee 上创建一个触发器以在任何插入/更新/删除时更新该表。

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

    现在这种方法对数据库的影响超过了必要的程度。如果这是一个问题,请将 SqlDependency 与 SQL 2005 或更高版本一起使用。创建一个 SqlDependency 并将当前日期插入到具有此依赖项对象的缓存中。如上所述从页面轮询此缓存项。当依赖发生变化(OnChange 事件)时,再次更新缓存项日期。

    【讨论】:

    • 我需要更多关于如何使用 SqlDependency 来解决我的问题的详细信息。你可以给我一些代码来解决我的问题吗?
    • 我没有这方面的代码,但是在 global.asax 中尝试这样的事情:1)调用 SqlDependency.Start 2)创建返回表中所有行的 SqlCommand 3)使用SqlCommand 4) 注册 OnChange 事件 5) 执行命令。将缓存项设置为当前日期时间 6) OnChange,将缓存项更新为当前日期时间 7) 在页面上,监视缓存项以了解数据何时更改。您还可以修改此 DBListener 包装器并在 global.asax 中调用它:blogs.microsoft.co.il/blogs/oshvartz/archive/2008/06/07/…
    【解决方案2】:

    我看不到具有轮询机制的其他选项,即使用 setTimeout+jQuery 或 ASP.NET AJAX Timer 以间隔提取信息。

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

    【讨论】:

      【解决方案3】:

      您可以使用SqlDependency 类:

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

      【讨论】:

      • @veggerby。是的?您可以在 ASP.NET 中的 System.Data.SqlClient 中使用 SqlDependency!
      • 你能给我一个示例代码或示例代码的链接吗?
      • 我尝试了很多。但是找不到我想要的。我想我必须尝试更多。我需要它用于 Web 应用程序。无论如何,感谢您的建议。
      • @veggerby:现在我明白你的意思了!我使用了错误的示例链接。谢谢!
      • 我知道您可以在 ASP.NET 中使用它(例如在您的示例中,它是一个“缓存”示例,即在手动执行刷新时工作,但您不能使用 SqlDepedency从客户端强制刷新。
      猜你喜欢
      • 2011-10-26
      • 1970-01-01
      • 2013-06-12
      • 2011-06-05
      • 2016-12-24
      • 2016-09-27
      • 1970-01-01
      • 2012-01-08
      • 2013-10-20
      相关资源
      最近更新 更多