Zwischenspeichern von Daten mit Datenquellensteuerelementen
Aktualisiert: November 2007
Datenquellensteuerelemente stellen datengebundenen Steuerelementen wie den Steuerelementen GridView, FormView oder DetailsView Datendienste bereit. Eine der Aufgaben dieser Dienste ist das Zwischenspeichern von Daten zur Leistungsverbesserung von Anwendungen, bei denen sich die Daten nur selten ändern.
Um mit dem SqlDataSource-Steuerelement oder dem AccessDataSource-Steuerelement Daten zwischenzuspeichern, müssen Sie die DataSourceMode-Eigenschaft dieser Steuerelemente auf DataSet festlegen. Das ObjectDataSource-Steuerelement kann Objekte zwischenspeichern, die vom zugrunde liegenden Geschäftsobjekt zurückgegeben werden. Objekte, die Ressourcen enthalten oder den Status beibehalten und nicht von mehreren Anforderungen gleichzeitig genutzt werden können, z. B. ein geöffnetes DataReader-Objekt, sollten nicht zwischengespeichert werden.
Aktivieren der Zwischenspeicherung mit Datenquellensteuerelementen
Die Zwischenspeicherung ist für Datenquellensteuerelemente nicht standardmäßig aktiviert, lässt sich aber durch Festlegen der EnableCaching-Eigenschaft des Steuerelements auf true aktivieren. Die zwischengespeicherten Daten werden basierend auf der in der CacheDuration-Eigenschaft angegebenen Anzahl von Sekunden entsprechend aktualisiert.
Sie können das Zwischenspeicherungsverhalten eines Datenquellensteuerelements weiter anpassen, indem Sie seine CacheExpirationPolicy-Eigenschaft festlegen. Wenn Sie den Wert der Eigenschaft auf Absolute festlegen, wird der Cache aktualisiert, sobald der CacheDuration-Wert überschritten ist. Wenn Sie die CacheExpirationPolicy-Eigenschaft auf Sliding festlegen, wird der Cache nur dann aktualisiert, wenn der CacheDuration -Wert seit dem Zeitpunkt des letzten Zugriffs auf das zwischengespeicherte Element überschritten wurde.
Wichtiger Hinweis: |
---|
Es wird empfohlen, dass Sie die EnableCaching-Eigenschaft auf false festlegen, wenn der Clientidentitätswechsel aktiviert ist und die Ergebnisse der Datenquelle auf Grundlage der Clientidentität abgerufen werden. Wenn die Zwischenspeicherung aktiviert ist, können die zwischengespeicherten Daten eines einzelnen Benutzers von allen Benutzern eingesehen werden. Es besteht die Gefahr, dass vertrauliche Informationen unerwünschten Quellen verfügbar gemacht werden. Der Clientidentitätswechsel ist aktiviert, wenn das impersonate-Attribut des identity-Konfigurationselements auf true festgelegt und die anonyme Identifikation auf dem Webserver für die Anwendung deaktiviert ist. |
Das folgende Codebeispiel zeigt ein SqlDataSource-Steuerelement, 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>
Erweiterte Szenarien zur Zwischenspeicherung
Wenn Sie das SqlDataSource-Steuerelement zusammen mit dem System.Data.SqlClient-Anbieter verwenden, können Sie die Vorteile der SqlCacheDependency-Klasse nutzen und zwischengespeicherte Daten nur dann aktualisieren lassen, wenn die Quelltabelle in der Datenbank geändert wurde. Weitere Informationen finden Sie unter Zwischenspeichern von Daten mithilfe des SqlDataSource-Steuerelements.