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

 

 

你可能感兴趣的:(dependency)