asp.net实现SQL2005的通知数据缓存

 

首先第一步是确保您的 Service Broker 已经激活,激活 Service Broker (Transact-SQL)如下:

USE master ;
GO

ALTER DATABASE YouDatabase SET ENABLE_BROKER ;
GO

如果您的数据库与应用程序是分布在网络上的两台服务器上,那么您有必要激活 Service Broker 网络(Transact-SQL)

创建 Service Broker 端点,其间指定端口号和身份验证级别,代码如下:

USE YouDataBase;
GO

CREATE ENDPOINT BrokerEndpoint
    STATE = STARTED
    AS TCP ( LISTENER_PORT = 4037 )
    FOR SERVICE_BROKER ( AUTHENTICATION = WINDOWS ) ;
GO

接下来是实现在asp.net 2.0缓存的Demo (以下内容引用自由港 http://www.cnblogs.com/yg_zhang/archive/2006/09/20/508961.html 非常感谢他)

1.首先在sqlserver2005 中创建一个test的数据库.添加一个 employee的数据库表.

 

CREATE TABLE [dbo].[employee](
[id] [int] IDENTITY(1,1) NOT NULL,
[name] [varchar](50)


2使用 vs2005 创建一个新的asp.net项目.

web.config如下

  1. <?xml version="1.0"?>
  2. <configuration xmlns="http://schemas.microsoft.com/.NetConfiguration/v2.0">
  3.     <appSettings/>
  4.     <connectionStrings>
  5.         <add name="mySource" connectionString="Data Source=./sql2005;Initial Catalog=test;Persist Security Info=True;User ID=sa;Password=sasa" providerName="System.Data.SqlClient"></add>
  6.     </connectionStrings>
  7.     <system.web>
  8.         <compilation debug="true"/>
  9.         <authentication mode="Windows"/>
  10.     </system.web>
  11. </configuration>

3.编写global.asax文件,启动监听sql2005通知事件.

  1. <%@ Application Language="C#" %>
  2. <%@ Import Namespace="System.Data.SqlClient" %>
  3. <script runat="server">
  4.     void Application_Start(object sender, EventArgs e) 
  5.     {
  6.         string connStr=ConfigurationManager.ConnectionStrings["mySource"].ConnectionString;
  7.         SqlDependency.Start(connStr);
  8.     }
  9.     
  10.     void Application_End(object sender, EventArgs e) 
  11.     {
  12.         string connStr = ConfigurationManager.ConnectionStrings["mySource"].ConnectionString;
  13.         SqlDependency.Stop(connStr);
  14.     }
  15. </script>

4.编写数据访问代码.创建一个EmployeeData的类,代码如下

  1. using System;
  2. using System.Data;
  3. using System.Data.SqlClient;
  4. using System.Configuration;
  5. using System.Data.Common;
  6. using System.Web;
  7. using System.Web.Caching;
  8. using System.Web.Security;
  9. using System.Web.UI;
  10. using System.Web.UI.WebControls;
  11. using System.Web.UI.WebControls.WebParts;
  12. using System.Web.UI.HtmlControls;
  13. /**//// <summary>
  14. /// EmployeeData 的摘要说明
  15. /// </summary>
  16. public class EmployeeData
  17. {
  18.     public EmployeeData()
  19.     {
  20.     }
  21.     private HttpContext context;
  22.     public DataSet GetCacheData()
  23.     {
  24.         context = HttpContext.Current;
  25.         DataSet cache =(DataSet) context.Cache["employee"];
  26.         if (cache == null)
  27.         {
  28.             return GetData();
  29.         }
  30.         else
  31.         {
  32.             return cache;
  33.         }
  34.     }
  35.     public DataSet GetData()
  36.     {
  37.         string connStr = ConfigurationManager.ConnectionStrings["mySource"].ConnectionString;
  38.         SqlConnection conn = new SqlConnection(connStr);
  39.         SqlDataAdapter adp = new SqlDataAdapter("select id,name from dbo.employee", conn);
  40.         SqlCacheDependency dep = new SqlCacheDependency(adp.SelectCommand);
  41.         DataSet ds=new DataSet();
  42.         adp.Fill(ds);
  43.         context.Cache.Add("employee", ds, dep, Cache.NoAbsoluteExpiration, Cache.NoSlidingExpiration, CacheItemPriority.Default, new CacheItemRemovedCallback(this.DataDiff));
  44.         return ds;
  45.     }
  46.     public void DataDiff(string key, object value, CacheItemRemovedReason reason)
  47.     {
  48.         Console.WriteLine("key:" + key);
  49.         GetData();
  50.     }
  51. }

这里需要注意的是 select语句的写法, 不能使用 select *  的方式,一定要在表名前加架构名称 如我们这里的 dbo.employee.

5.编写测试页面代码.

  1. <%@ Page Language="C#" AutoEventWireup="true"  CodeFile="Default.aspx.cs" Inherits="_Default" %>
  2. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
  3. <html xmlns="http://www.w3.org/1999/xhtml" >
  4. <head runat="server">
  5.     <title>无标题页</title>
  6. </head>
  7. <body>
  8.     <form id="form1" runat="server">
  9.     <div>
  10.         <asp:GridView ID="GridView1" runat="server" >
  11.         </asp:GridView>
  12.     </div>
  13.     </form>
  14. </body>
  15. </html>

6.插入后台代码

  1. using System;
  2. using System.Data;
  3. using System.Configuration;
  4. using System.Web.Caching;
  5. using System.Data.SqlClient;
  6. using System.Web;
  7. using System.Web.Security;
  8. using System.Web.UI;
  9. using System.Web.UI.WebControls;
  10. using System.Web.UI.WebControls.WebParts;
  11. using System.Web.UI.HtmlControls;
  12. public partial class _Default : System.Web.UI.Page 
  13. {
  14.     protected void Page_Load(object sender, EventArgs e)
  15.     {
  16.         EmployeeData em=new EmployeeData();
  17.         GridView1.DataSource = em.GetCacheData();
  18.         GridView1.DataBind();
  19.     }
  20. }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值