• Asp.net使用SqlDependency


    系列目录:

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

     

  • 相关阅读:
    深入理解Java:注解(Annotation)--注解处理器
    深入理解Java:注解(Annotation)基本概念
    深入理解Java:注解(Annotation)自定义注解入门
    SpringMVC从Controller跳转到另一个Controller
    使用 Spring 2.5 注释驱动的 IoC 功能
    SpringMVC之controller篇
    Oracle存储过程in、out、in out 模式参数
    初识Flutter
    浅谈Android 6.0之Runtime Permissions
    Java版斯诺克开源分享
  • 原文地址:https://www.cnblogs.com/scottckt/p/1965175.html
Copyright © 2020-2023  润新知