• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    迪恩网络公众号

Asp.net使用SqlDependency

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

系列目录:

SqlDependency缓存用法

Asp.net使用SqlDependency

SqlCacheDependency使用命令通知使缓存无效

CacheDependency用法

AggregateCacheDependency 用法

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页面。页面会从缓存中取出数据。

 

 


鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
详解ASP.NET Core Docker部署发布时间:2022-07-10
下一篇:
关于ASP.Net的导入导出的(1)发布时间:2022-07-10
热门推荐
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap