使用 SqlDataSource 控件緩存數據

qlDataSource 控件緩存數據javascript

 

SqlDataSource 控件可對它檢索過的數據進行緩存,這樣能夠避免再次運行資源消耗量較大的查詢,從而提升應用程序的性能。緩存主要用於數據變化不頻繁的狀況。html

此外,當經過 System.Data.SqlClient 提供程序使用 SqlDataSource 控件時,能夠使用 SqlCacheDependency 對象。這樣可以使 SqlDataSource 控件僅在 SelectCommand 返回的數據在數據庫中被修改時才刷新緩存。java

經過 SqlDataSource 控件啓用緩存

SqlDataSource 控件的 DataSourceMode 屬性設置爲 DataSet 時,該控件可對數據進行緩存。默認狀況下並未啓用緩存,但能夠經過將 EnableCaching 屬性設置爲 true 來啓用緩存。web

將基於一個時間間隔對緩存數據進行刷新。能夠將 CacheDuration 屬性設置爲刷新緩存以前要等待的秒數。SqlDataSource 控件爲每一個 ConnectionStringSelectCommandSelectParameters 值的組合維護一個單獨的緩存項。sql

經過設置 CacheExpirationPolicy 屬性,能夠進一步控制 SqlDataSource 緩存的行爲。Absolute 值會在超過 CacheDuration 值時強制刷新緩存。將 CacheExpirationPolicy 屬性設置爲 Sliding,則僅在從最後一次訪問緩存項起超過 CacheDuration 值以後纔對緩存進行刷新。數據庫

下面的代碼示例演示一個 SqlDataSource 控件,該控件配置爲每 20 秒刷新一次數據:c#

<%@ Page language="C#" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html  >
    <head runat="server">  
   <title>ASP.NET Example</title> </head> <body>  
       <form id="form1" runat="server">           
  <asp:SqlDataSource            
     id="SqlDataSource1"                runat="server"                 DataSourceMode="DataSet"                 ConnectionString="<%$ ConnectionStrings:MyNorthwind%>"                 EnableCaching="True"                 CacheDuration="20"                 SelectCommand="SELECT EmployeeID,FirstName,LastName,Title FROM Employees">
            </asp:SqlDataSource>             <asp:GridView                 id="GridView1"                 runat="server"                 AutoGenerateColumns="False"                 DataSourceID="SqlDataSource1">                 <columns>                     <asp:BoundField HeaderText="First Name" DataField="FirstName" />                     <asp:BoundField HeaderText="Last Name" DataField="LastName" />                     <asp:BoundField HeaderText="Title" DataField="Title" />                 </columns>             </asp:GridView>        
 </form>   
  </body>
</html>

使用 SqlCacheDependency 對象

SqlDataSource 控件支持基於 SqlCacheDependency 對象的可選過時策略。能夠使用 SqlCacheDependency 對象來確保僅在修改了數據庫中的源表時纔對緩存數據進行刷新。爲了使用 SqlCacheDependency 對象,必須爲數據庫服務器運行 Microsoft SQL Server 通知服務。緩存

若是數據源是 SQL Server 7.0 或更高版本,經過將 SqlDataSource 控件的 SqlCacheDependency 屬性設置爲由鏈接字符串和表標識符組成的字符串(形式爲「ConnectionString:Table」),能夠使用 SqlCacheDependency 對象對數據庫進行輪詢以檢查更改。若是 SqlCacheDependency 涉及多個表,則鏈接字符串和表名稱對以分號分隔,以下面的示例所示:服務器

「ConnectionString1:Table1;ConnectionString2:Table2」。ide

若是數據源是 Microsoft SQL Server 2005,則還能夠選擇讓 SQL Server 嚮應用程序通知更改,而不用輪詢檢查更改。經過將 SqlCacheDependency 屬性設置爲字符串「CommandNotification」,能夠使用該通知模型。有關 SqlCacheDependency 對象的更多信息,請參見使用 SqlCacheDependency 類在 ASP.NET 中緩存

下面的代碼示例演示如何建立 Microsoft SQL Server 緩存依賴項,以及如何設置 SqlDataSource 控件的 SqlCacheDependency 屬性。在該示例中,每 120 秒對數據庫進行一次輪詢。若是在這段時間內 Northwind Employees 表中的數據發生更改,則下次對數據庫進行輪詢時將對由 SqlDataSource 控件緩存和 GridView 控件顯示的數據進行刷新。

<%@ Page language="c#" %> <!-- The page uses an example configuration that includes connection strings and a defined SqlCacheDependecy. <?xml version="1.0"?> <configuration>   <connectionStrings>
    <add name="MyNorthwind"          connectionString="Data Source="localhost";Integrated Security="SSPI";Initial Catalog="Northwind""          providerName="System.Data.SqlClient" />
  </connectionStrings>
  <system.web>     <cache>  
     <sqlCacheDependency enabled="true">         <databases>    
       <add             name="Northwind"             connectionStringName="MyNorthwind"             pollTime="120000" />         </databases>       </sqlCacheDependency>     </cache>
  </system.web> </configuration> --> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"     "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html  >  
 <head runat="server">     <title>ASP.NET Example</title> </head> <body>     <form id="Form1" method="post" runat="server">         <asp:gridview           id="GridView1"           runat="server"           datasourceid="SqlDataSource1" />         <asp:sqldatasource           id="SqlDataSource1"           runat="server"           connectionstring="<%$ ConnectionStrings:MyNorthwind%>"           selectcommand="SELECT EmployeeID,FirstName,Lastname FROM Employees"           enablecaching="True"           cacheduration="300"           cacheexpirationpolicy="Absolute"           sqlcachedependency="Northwind:Employees" />     </form>   </body>
</html>
相關文章
相關標籤/搜索