asp.Net SQL 2005の通知データキャッシュを実現

23794 ワード

まず、サービスブローカーがアクティブになっていることを確認し、サービスブローカーをアクティブにするには、次の手順に従います.
USE master ; GO

ALTER DATABASE YouDatabase SET ENABLE_BROKER ; GO

データベースとアプリケーションがネットワーク上の2台のサーバに分散している場合は、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.まず、sqlserver 2005にtestのデータベースを作成する.employeeのデータベーステーブルを追加します.
 
CREATE TABLE [dbo].[employee]( [id] [int] IDENTITY(1,1) NOT NULL, [name] [varchar](50)

 
2 vs 2005を使用して新しい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ファイルは、sql 2005通知イベントの傍受を開始する.
1."C#" %>
2."System.Data.SqlClient" %>
3.
4."</span><span style="color: #800000;">server</span><span style="color: #800000;">"</span>>
<span style="color: #800080;">5</span><span style="color: #000000;">.
</span><span style="color: #800080;">6</span>.    <span style="color: #0000ff;">void</span> Application_Start(<span style="color: #0000ff;">object</span><span style="color: #000000;"> sender, EventArgs e) 
</span><span style="color: #800080;">7</span><span style="color: #000000;">.    {
</span><span style="color: #800080;">8</span>.        <span style="color: #0000ff;">string</span> connStr=ConfigurationManager.ConnectionStrings[<span style="color: #800000;">"</span><span style="color: #800000;">mySource</span><span style="color: #800000;">"</span><span style="color: #000000;">].ConnectionString;
</span><span style="color: #800080;">9</span><span style="color: #000000;">.        SqlDependency.Start(connStr);
</span><span style="color: #800080;">10</span><span style="color: #000000;">.    }
</span><span style="color: #800080;">11</span><span style="color: #000000;">.    
</span><span style="color: #800080;">12</span>.    <span style="color: #0000ff;">void</span> Application_End(<span style="color: #0000ff;">object</span><span style="color: #000000;"> sender, EventArgs e) 
</span><span style="color: #800080;">13</span><span style="color: #000000;">.    {
</span><span style="color: #800080;">14</span>.        <span style="color: #0000ff;">string</span> connStr = ConfigurationManager.ConnectionStrings[<span style="color: #800000;">"</span><span style="color: #800000;">mySource</span><span style="color: #800000;">"</span><span style="color: #000000;">].ConnectionString;
</span><span style="color: #800080;">15</span><span style="color: #000000;">.        SqlDependency.Stop(connStr);
</span><span style="color: #800080;">16</span><span style="color: #000000;">.    }
</span><span style="color: #800080;">17</span>.

 
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.
14./**//// 
15./// EmployeeData       
16.///  
17.public class EmployeeData
18.{
19.    public EmployeeData()
20.    {
21.    }
22.
23.    private HttpContext context;
24.
25.    public DataSet GetCacheData()
26.    {
27.        context = HttpContext.Current;
28.        DataSet cache =(DataSet) context.Cache["employee"];
29.        if (cache == null)
30.        {
31.            return GetData();
32.        }
33.        else
34.        {
35.            return cache;
36.        }
37.    }
38.
39.
40.    public DataSet GetData()
41.    {
42.        string connStr = ConfigurationManager.ConnectionStrings["mySource"].ConnectionString;
43.        SqlConnection conn = new SqlConnection(connStr);
44.        SqlDataAdapter adp = new SqlDataAdapter("select id,name from dbo.employee", conn);
45.        SqlCacheDependency dep = new SqlCacheDependency(adp.SelectCommand);
46.        DataSet ds=new DataSet();
47.        adp.Fill(ds);
48.        context.Cache.Add("employee", ds, dep, Cache.NoAbsoluteExpiration, Cache.NoSlidingExpiration, CacheItemPriority.Default, new CacheItemRemovedCallback(this.DataDiff));
49.        return ds;
50.    }
51.
52.    public void DataDiff(string key, object value, CacheItemRemovedReason reason)
53.    {
54.        Console.WriteLine("key:" + key);
55.        GetData();
56.    }
57.
58.}

 

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

5.编写测试页面代码.

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

 
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.
13.public partial class _Default : System.Web.UI.Page 
14.{
15.    protected void Page_Load(object sender, EventArgs e)
16.    {
17.        EmployeeData em=new EmployeeData();
18.        GridView1.DataSource = em.GetCacheData();
19.        GridView1.DataBind();
20.    }
21.
22.}