zoukankan      html  css  js  c++  java
  • 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页面。页面会从缓存中取出数据。

     

  • 相关阅读:
    npm publish 失败可能的原因记录
    nodejs版实现properties后缀文件解析
    CSS 毛玻璃效果
    echarts markLine 辅助线非直线设置
    sql 数据类型 建表时如何选择数据类型
    用row_nuber 分页的存储过程
    错误描述:未能找到路径“C:/”的一部分
    设置VS2010默认以管理员权限启动
    通过做nopcommerce电商项目对EF的理解(一)
    获取多表联合查询的存储过程。
  • 原文地址:https://www.cnblogs.com/scottckt/p/1965175.html
Copyright © 2011-2022 走看看