Freigeben über


Zwischenspeichern von Daten mithilfe des SqlDataSource-Steuerelements

Aktualisiert: November 2007

Das SqlDataSource-Steuerelement kann abgerufene Daten zwischenspeichern. Dadurch kann das erneute Ausführen von ressourcenintensiven Abfragen vermieden werden, was zu einer verbesserten Leistung der Anwendung führt. Das Zwischenspeichern ist hauptsächlich in Situationen nützlich, in denen sich die Daten nur selten ändern.

Wenn Sie das SqlDataSource-Steuerelement mit dem System.Data.SqlClient-Anbieter verwenden, können Sie außerdem das SqlCacheDependency-Objekt verwenden. Dadurch erhält das SqlDataSource-Steuerelement die Möglichkeit, den Cache nur dann zu aktualisieren, wenn die durch den SelectCommand zurückgegebenen Daten in der Datenbank geändert wurden.

Aktivieren des Zwischenspeicherns mit dem SqlDataSource-Steuerelement

Das SqlDataSource-Steuerelement kann Daten zwischenspeichern, wenn seine DataSourceMode-Eigenschaft auf DataSet festgelegt ist. Das Zwischenspeichern ist nicht standardmäßig aktiviert, Sie können es jedoch durch Festlegen der EnableCaching-Eigenschaft auf true aktivieren.

Zwischengespeicherte Daten werden auf Grundlage eines Zeitintervalls aktualisiert. Sie können in der CacheDuration-Eigenschaft festlegen, nach wie vielen Sekunden der Cache aktualisiert werden soll. Das SqlDataSource-Steuerelement verwaltet für jede Kombination der Werte ConnectionString, SelectCommand und SelectParameters ein separates Cacheelement.

Sie können das Verhalten des SqlDataSource-Caches außerdem steuern, indem Sie die CacheExpirationPolicy-Eigenschaft festlegen. Ein Wert von Absolute zwingt den Cache zur Aktualisierung, wenn der CacheDuration-Wert überstiegen wird. Wenn Sie die CacheExpirationPolicy-Eigenschaft auf Sliding festlegen, wird der Cache nur aktualisiert, wenn der CacheDuration-Wert seit dem Zeitpunkt des letzten Zugriffs auf das zwischengespeicherte Element überstiegen wurde.

Im folgenden Codebeispiel wird ein SqlDataSource-Steuerelement gezeigt, das so konfiguriert ist, dass die Daten alle 20 Sekunden aktualisiert werden:

<%@ Page language="VB" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml" >
    <head >
    <title>ASP.NET Example</title>
</head>
<body>
        <form id="form1" >

            <asp:SqlDataSource
                id="SqlDataSource1"
                
                DataSourceMode="DataSet"
                ConnectionString="<%$ ConnectionStrings:MyNorthwind%>"
                EnableCaching="True"
                CacheDuration="20"
                SelectCommand="SELECT EmployeeID,FirstName,LastName,Title FROM Employees">
            </asp:SqlDataSource>

            <asp:GridView
                id="GridView1"
                
                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>
<%@ Page language="C#" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml" >
    <head >
    <title>ASP.NET Example</title>
</head>
<body>
        <form id="form1" >

            <asp:SqlDataSource
                id="SqlDataSource1"
                
                DataSourceMode="DataSet"
                ConnectionString="<%$ ConnectionStrings:MyNorthwind%>"
                EnableCaching="True"
                CacheDuration="20"
                SelectCommand="SELECT EmployeeID,FirstName,LastName,Title FROM Employees">
            </asp:SqlDataSource>

            <asp:GridView
                id="GridView1"
                
                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>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml" >
    <head >
    <title>ASP.NET Example</title>
</head>
<body>
        <form id="form1" >

            <asp:SqlDataSource
                id="SqlDataSource1"
                
                DataSourceMode="DataSet"
                ConnectionString="Data Source=localhost;Integrated Security=SSPI;Initial Catalog=Northwind;"
                EnableCaching="True"
                CacheDuration="20"
                SelectCommand="SELECT EmployeeID,FirstName,LastName,Title FROM Employees">
            </asp:SqlDataSource>

            <asp:GridView
                id="GridView1"
                
                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>

Verwenden des SqlCacheDependency-Objekts

Das SqlDataSource-Steuerelement unterstützt eine optionale Ablaufrichtlinie, die auf einem SqlCacheDependency-Objekt basiert. Mit dem SqlCacheDependency-Objekt kann sichergestellt werden, dass zwischengespeicherte Daten nur dann aktualisiert werden, wenn die Quelltabelle in der Datenbank geändert wurde. Damit Sie das SqlCacheDependency-Objekt verwenden können, muss der Microsoft SQL Server-Benachrichtigungsdienst für den Datenbankserver ausgeführt werden.

Wenn Ihre Datenquelle SQL Server 7.0 oder höher ist, können Sie mit dem SqlCacheDependency-Objekt bestimmen, ob in der Datenbank Änderungen stattgefunden haben. Legen Sie dazu die SqlCacheDependency-Eigenschaft des SqlDataSource-Steuerelements auf eine Zeichenfolge fest, die aus einer Verbindungszeichenfolge und Tabellenbezeichnern besteht, und zwar in der Form ''Verbindungszeichenfolge:Tabelle". Wenn SqlCacheDependency mehr als eine Tabelle beinhaltet, werden die Paare aus Verbindungszeichenfolge und Tabellenname durch Semikolons getrennt, wie im folgenden Beispiel gezeigt:

"Verbindungszeichenfolge1:Tabelle1; Verbindungszeichenfolge2:Tabelle2".

Wenn Sie Microsoft SQL Server 2005 als Datenquelle verwenden, haben Sie zusätzlich die Möglichkeit, Ihre Anwendung durch SQL Server über Änderungen benachrichtigen zu lassen. Sie müssen die Datenbank dann nicht auf Änderungen prüfen. Sie können das Benachrichtigungsmodell verwenden, indem Sie die SqlCacheDependency-Eigenschaft auf die Zeichenfolge "CommandNotification" festlegen. Weitere Informationen über das SqlCacheDependency-Objekt finden Sie unter Zwischenspeichern in ASP.NET mithilfe der SqlCacheDependency-Klasse.

Das folgende Codebeispiel zeigt, wie Sie eine Microsoft SQL Server-Cacheabhängigkeit erstellen und die SqlCacheDependency-Eigenschaft eines SqlDataSource-Steuerelements festlegen. Im Beispiel wird die Datenbank alle 120 Sekunden auf Änderungen geprüft. Wenn sich die Daten in der Tabelle Northwind Employees während dieser Zeit ändern, werden die durch das SqlDataSource-Steuerelement zwischengespeicherten und durch das GridView-Steuerelement angezeigten Daten beim nächsten Prüfen der Datenbank aktualisiert.

<%@ Page language="vb" %>

<!--

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 xmlns="http://www.w3.org/1999/xhtml" >
  <head >
    <title>ASP.NET Example</title>
</head>
<body>
    <form id="Form1" method="post" >

        <asp:gridview
          id="GridView1"
          
          datasourceid="SqlDataSource1" />

        <asp:sqldatasource
          id="SqlDataSource1"
          
          connectionstring="<%$ ConnectionStrings:MyNorthwind%>"
          selectcommand="SELECT EmployeeID,FirstName,Lastname FROM Employees"
          enablecaching="True"
          cacheduration="300"
          cacheexpirationpolicy="Absolute"
          sqlcachedependency="Northwind:Employees" />

    </form>
  </body>
</html>
<%@ 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 xmlns="http://www.w3.org/1999/xhtml" >
  <head >
    <title>ASP.NET Example</title>
</head>
<body>
    <form id="Form1" method="post" >

        <asp:gridview
          id="GridView1"
          
          datasourceid="SqlDataSource1" />

        <asp:sqldatasource
          id="SqlDataSource1"
          
          connectionstring="<%$ ConnectionStrings:MyNorthwind%>"
          selectcommand="SELECT EmployeeID,FirstName,Lastname FROM Employees"
          enablecaching="True"
          cacheduration="300"
          cacheexpirationpolicy="Absolute"
          sqlcachedependency="Northwind:Employees" />

    </form>
  </body>
</html>
<%@ Page language="VJ#" %>

<!--

The page uses an example configuration that includes
connection strings and a defined SqlCacheDependecy.

<?xml version="1.0"?>
<configuration>

  <connectionStrings>
    <add name = "NorthwindConnection" connectionString = "Data Source="localhost";Integrated Security="SSPI";Initial Catalog="Northwind"" />
  </connectionStrings>

  <system.web>

    ...

    <cache>
      <sqlCacheDependency enabled="true">
        <databases>
          <add
            name="Northwind_Remote"
            connectionStringName="NorthwindConnection"
            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 xmlns="http://www.w3.org/1999/xhtml" >
  <head >
    <title>ASP.NET Example</title>
</head>
<body>
    <form id="Form1" method="post" >

        <asp:gridview
          id="GridView1"
          
          datasourceid="SqlDataSource1" />

        <asp:sqldatasource
          id="SqlDataSource1"
          
          connectionstring="Data Source=localhost;Integrated Security=SSPI;Initial Catalog=Northwind"
          selectcommand="SELECT EmployeeID,FirstName,Lastname FROM Employees"
          enablecaching="True"
          cacheduration="300"
          cacheexpirationpolicy="Absolute"
          sqlcachedependency="Northwind_Remote:Employees" />

    </form>
  </body>
</html>

Siehe auch

Konzepte

Übersicht über das SqlDataSource-Webserversteuerelement

Weitere Ressourcen

ASP.NET-Zwischenspeicherung

Datengebundene Webserversteuerelemente