• data caching از طريق برنامه :  برای data caching از طريق كد لازم است كه يك شی جديد   SqlCacheDependency ايجاد و آن را با استفاده از متد  Cache.Insert  به cache اضافه نمود ( مشابه file dependency ) .
    در  constructor  شی  SqlCacheDependency  می بايست دو رشته را مشخص كرد . اولين رشته نام بانك اطلاعاتی ( توسط عنصر <add> در بخش  <sqlCacheDependency> فايل web.config مشخص شده است )  و دومين رشته ، نام جدولی است كه قصد مانيتورينگ تغييرات آن را داريم.
    در اولين مرحله يك وابستگی برای جدول Employees  بانك اطلاعاتی Northwind ايجاد و در مرحله بعد آيتم مورد نظر را به cache اضافه می نمائيم . حضور آيتم فوق مشروط به عدم بروز تغييرات در جدول Employees   است . در صورت بروز تغييرات در جدول فوق ، اعتبار داده cache شده به اتمام رسيده  و از cache خارج می گردد .
    كد زير نحوه انجام اين كار را نشان می دهد .
Dim empDependency As New SqlCacheDependency(“Northwind”, “Employees”)
Cache.Insert(“Employees”, dsEmployees, empDependency)
  •  output caching : بدين منظور لازم است كه خصلت SqlCacheDependency به دايركتيو OutputCache معرفی شود . مقدار خصلت فوق شامل نام بانك اطلاعاتی وابسته و جدول مورد نظر است كه توسط يك colon از يكديگر جدا شده اند .
    كد زير نحوه انجام عمليات فوق را نشان می دهد .
 <%@ OutputCache Duration=”600″ SqlDependency=”Northwind:Employees” VaryByParam=”none” %>
  • يك كنترل منبع داده: از روش فوق می توان به همراه كنترل های SqlDataSource و ObjectDataSource  استفاده كرد . كد زير نحوه انجام اين كار را نشان می دهد .
 <asp:SqlDataSource EnableCaching=”True” SqlCacheDependency=”Northwind:Employees” … />

بررسی‌ يك مثال كاربردی
در اين مثال پس از فعال كردن سيستم آگاه سازی caching بر روی جدول Employees  بانك اطلاعاتی  Northwind  ، يك داده فرضی در cache ذخيره می گردد . در صورت بروز هر گونه تغيير در جدول Employees ، اعتبار داده cache شده با توجه به مدت زمان تعريف شده توسط خصلت pollTime عنصر  <sqlCacheDepency> موجود در  فايل web.config به اتمام خواهد رسيد .
بدين منظور عمليات مورد نياز جهت پياده سازی را در دو فاز مختلف دنبال می نمائيم .

فاز اول : ايجاد زيرساخت لازم برای استفاده از سيستم آگاه سازی
caching
در اين مثال برای فعال كردن سيستم آگاه سازی caching بر روی بانك اطلاعاتی Northwind و ريجستر كردن جدول Employees به منظور حمايت از سيستم آگاه سازی caching توسط برنامه خط دستوری aspnet_regsql.exe از سوئيچ C – استفاده شده است تا در مقابل مشخص كردن نام كاربر ، رمز عبور و نام سرويس دهنده از يك Connection string استفاده گردد .

مرحله اول
: فعال كردن سيستم آگاه سازی caching بر روی بانك اطلاعاتی  Northwind به كمك برنامه خط دستوری aspnet_regsql.exe

  C:\WINDOWS\Microsoft. NET\Framework\V2.0.50727>aspnet_regsql -ed
-C “Data Source=SRCOSERVER\SQLEXPRESS;Initial Catalog=NORTHWND;Integrated Security=True”

Enabling the database for SQL cache dependency.
….
Finished.

پس از اجرای دستور فوق ، يك جدول جديد با نام SqlCacheTablesForChangeNotification به بانك اطلاعاتی Northwind اضافه می گردد. جدول فوق دارای سه ستون   notificationCreated ، tableName و changeId است و  از آن برای پيگيری انجام تغييرات استفاده می گردد .
شكل 1 ماحصل تغييرات بر روی بانك اطلاعاتی  Northwind را پس از اجرای دستور فوق نشان می دهد .

شكل 1 : ماحصل تغييرات بر روی بانك اطلاعاتی  Northwind  پس از اجرای دستور aspnet_reqsql

مرحله دوم : ريجستر كردن جدول Employees كه نيازمند حمايت از سيستم آگاه سازی caching است .

  C:\WINDOWS\Microsoft. NET\Framework\V2.0.50727>aspnet_regsql -et
-C “Data Source=SRCOSERVER\SQLEXPRESS;Initial Catalog=NORTHWND;Integrated Security=True”
-t Employees

Enabling the table  for SQL cache dependency.
.
Finished.

پس از اجرای دستور فوق ، trigger آگاه سازی caching و stored procedure مورد نياز  برای جدول Employees ايجاد می گردد . ماحصل تغييرات ايجاد شده بر روی  جدول فوق پس از اجرای دستور aspnet_regsql.exe در شكل های 1 و 2 نشان داده شده است .

شكل 2  : ايجاد trigger بر روی  جدول Employees  پس از اجرای دستور aspnet_reqsql

شكل 3  : ايجاد stored procedure  مورد نياز در ارتباط با جدول Employees  پس از اجرای دستور aspnet_reqsql

مرحله سوم :  فعال كردن polling از طريق فايل web.config

فعال كردن polling از طريق فايل web.config
<configuration>
<connectionStrings>
<add name=”NORTHWNDConnectionString”
connectionString=”Data Source=SRCOSERVER\SQLEXPRESS;
Initial Catalog=NORTHWND;Integrated Security=True”/>
</connectionStrings>
<system.web>
<caching>
  <sqlCacheDependency enabled=”true” pollTime=”15000″ >
<databases>
<add name=”Northwind” connectionStringName=”NORTHWNDConnectionString” />
</databases>
</sqlCacheDependency>

</caching>

</system.web>
</configuration>

فاز دوم : استفاده از زيرساخت ايجاد شده سيستم آگاه سازی caching در برنامه
در اين برنامه از دو button به نام ” تغيير جدول ” و ” بررسی آيتم cache شده ” استفاده شده است . با استفاده از دكمه “بررسی آيتم cache شده ” ، حضور آيتم مورد نظر در cache بررسی و پيام مناسب در خروجی نمايش داده می شود . در صورت كليك بر روی دكمه “تغيير جدول ” ،  يكی از ركورهای موجود در جدول Employees   بانك اطلاعاتی Northwind تغيير يافته و بهانه خارج شدن داده cache شده از حافظه ايجاد می گردد .
كد برنامه فوق در جدول زير نشان داده شده است .

 ايجاد cache dependency در بانك اطلاعاتی NORTHWND
<%@ Page Language=”VB” Culture=”fa-IR” UICulture=”fa-IR” %>
<%@ import Namespace=”system.Data” %>
<%@ import Namespace=”system.Data.SqlClient” %>
<%@ Import Namespace=”System.Web.Configuration” %>
<Script runat=”server”>
Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
If Not Me.IsPostBack Then
lblInfo.Text &= “ايجاد آيتم وابسته<br />”
Cache.Remove(“CachedItem”)
‘  Employees  ايجاد يك وابستگی برای جدول
Dim dependency As New SqlCacheDependency(“Northwind”, “Employees”)
Dim dt As DataTable = GetEmployeeTable()
lblInfo.Text &= “اضافه كردن آيتم مورد نظر به cache<br />”
Cache.Insert(“CachedItem”, dt, dependency)
End If
End Sub
‘ =================================================================
Private connectionString As String =_
WebConfigurationManager.ConnectionStrings(“NORTHWNDConnectionString”).ConnectionString
Function GetEmployeeTable() As DataTable
Dim con As New SqlConnection(connectionString)
Dim sql As String = “SELECT * FROM Employees”
Dim da As New SqlDataAdapter(sql, con)
Dim ds As New DataSet()
da.Fill(ds, “Employees”)
Return ds.Tables(0)
End Function
‘ ==================================================================
Sub cmdGetItem_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles cmdGetItem.Click
If Cache(“CachedItem”) Is Nothing Then
lblInfo.Text &= “آيتم مورد نظر در cache موجود نمی باشد<br />”
Else
lblInfo.Text &= “آيتم مورد نظر همچنان در cache موجود است<br />”
End If
End Sub
‘ =================================================================
Sub cmdModify_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles cmdModify.Click
Dim con As New SqlConnection(connectionString)
‘ بهنگام سازی بانك اطلاعاتی
Dim sql As String = “UPDATE Employees SET LastName=’sakha ravesh’ WHERE LastName=’srco'”
Dim cmd As New SqlCommand(sql, con)
Try
con.Open()
cmd.ExecuteNonQuery()
Finally
con.Close()
End Try
lblInfo.Text &= “بهنگام سازی بانك به تمام رسيد ، تا اتمام زمان polling منتظر بمانيد<br />”
End Sub
‘ =================================================================
</Script>

<html xmlns=”http://www.w3.org/1999/xhtml” dir=”rtl” >
<head id=”Head1″ runat=”server”>
<title>Untitled Page</title>
</head>
<body style=”font-family: Tahoma”>
<form id=”form1″ runat=”server”>
<div>
<asp:Button ID=”cmdModify” runat=”server” Height=”24px”  Text=”تغيير جدول”
Width=”103px” Font-Names=”Tahoma” />
<asp:Button ID=”cmdGetItem” runat=”server” Height=”24px”
Text=”بررسی آيتم cache شده”
Width=”180px” Font-Names=”Tahoma” /><br /><br />
<asp:Label ID=”lblInfo” runat=”server” BackColor=”LightYellow” BorderStyle=”Groove”
BorderWidth=”2px” Font-Names=”Tahoma” Font-Size=”X-Small” Height=”192px”
Width=”536px”></asp:Label>
</div>
</form>
</body>
</html>

خروجی مثال فوق در شكل 4 نشان داده شده است .

شكل 4 : ايجاد cache dependency در   SQL Server 2000

توضيحات :

  • در زمان فراخوانی برنامه فوق از طريق روتين Page_laod عمليات زير انجام می شود :
    –  ايجاد يك شی وابسته برای جدول  Employees   بانك اطلاعاتی Northwind
    – درج dataset حاوی ركوردهای بازيابی شده از جدول  Employees  در cache
    – نمايش پيام  های مناسب در خروجی به كمك كنترل سرويس دهنده label ( با نام   lblInfo  )
  • روتين cmdGetItem_Click ، وجود آيتم مورد نظر را در Cache بررسی و در صورتی كه اين آيتم در cache موجود نباشد يك پيام خاص از طريق كنترل سرويس دهنده label در خروجی نمايش داده می شود . در صورت وجود آيتم مورد نظر در cache ، مقدار آن از cache بازيابی و يك پيام خاص از طريق كنترل سرويس دهنده label در خروجی نمايش داده می شود .

روتين cmdModify_Click ، مسئوليت ايجاد تغيير در  جدول Employees   بانك اطلاعاتی Northwind  را برعهده دارد

دسته بندی : افزایش درآمد سایت