在线时间:8:00-16:00
迪恩网络APP
随时随地掌握行业动态
扫描二维码
关注迪恩网络微信公众号
系列目录: SqlCacheDependency使用轮流检测技术(轮询)使缓存无效 ----------------------------------------------------------------------------------------------
Asp.net使用与在Winform中用法基本相同。请看下边代码。 web页面不像winFrom会自动变更页面内容。所以需要自己手动刷新页面。下例中将取出的资料缓存起来,然后在每次刷新时重新绑定。
using System.Data;
using System.Configuration; using System.Data.SqlClient; namespace SqlDependencyInAspNet { public partial class _Default : System.Web.UI.Page { string connectionString = ConfigurationManager.ConnectionStrings["NHibernateSampleDb"].ToString(); protected void Page_Load(object sender, EventArgs e) { if (!IsPostBack) { SqlDependency.Start(connectionString); if (Cache["TableDate"] == null) { GetData(); } DataTable dt = (DataTable)Cache["TableDate"]; gvData.DataSource = dt; gvData.DataBind(); } } /// <summary> /// 得到资料 /// </summary> private void GetData() { using (SqlConnection cn = new SqlConnection(connectionString)) { using (SqlCommand cmd=cn.CreateCommand()) { cn.Open(); cmd.CommandText = "select [CustomerId],[Firstname],[Lastname],[Version] from [dbo].[Customer]"; SqlDependency dep = new SqlDependency(cmd); //当有DML操作时,onChange事件会接收来自Sql Server通过sq_DispatcherProc存储过程发送给应用程序的消息。 dep.OnChange += new OnChangeEventHandler(dep_OnChange); DataTable dt = new DataTable(); using (SqlDataReader rdr = cmd.ExecuteReader()) { dt.Load(rdr); } Cache["TableDate"] = dt; } } } /// <summary> /// 当有异动时,接收资料并缓存起来。 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> void dep_OnChange(object sender, SqlNotificationEventArgs e) { /* 当取数据时间长时,有可能数据未取完,窗口就初关闭.所以先删除Cahce,在取数据。 */ Cache.Remove("Cache"); GetData(); } } }
在Global.asax的Application_End事件中终止通信。代码如下。
protected void Application_End(object sender, EventArgs e)
{ SqlDependency.Stop(System.Configuration.ConfigurationManager.ConnectionStrings["NHibernateSampleDb"].ToString()); } 测试,修改数据库,然后刷新Web页面。页面会从缓存中取出数据。
|
请发表评论