SqlCacheDependency Klas
Definitie
Belangrijk
Bepaalde informatie heeft betrekking op een voorlopige productversie die aanzienlijk kan worden gewijzigd voordat deze wordt uitgebracht. Microsoft biedt geen enkele expliciete of impliciete garanties met betrekking tot de informatie die hier wordt verstrekt.
Hiermee maakt u een relatie tot stand tussen een item dat is opgeslagen in het Cache-object van een ASP.NET toepassing en een specifieke SQL Server databasetabel of de resultaten van een SQL Server 2005-query. Deze klasse kan niet worden overgenomen.
public ref class SqlCacheDependency sealed : System::Web::Caching::CacheDependency
public sealed class SqlCacheDependency : System.Web.Caching.CacheDependency
type SqlCacheDependency = class
inherit CacheDependency
Public NotInheritable Class SqlCacheDependency
Inherits CacheDependency
- Overname
Voorbeelden
In het volgende codevoorbeeld worden de SqlDataSource en GridView besturingselementen gebruikt om een databasetabel weer te geven. Wanneer de pagina is geladen, probeert de pagina een SqlCacheDependency object te maken. Nadat het SqlCacheDependency object is gemaakt, voegt de pagina een item toe aan het Cache item met een afhankelijkheid van het SqlCacheDependency object. U moet uitzonderingsafhandeling gebruiken die vergelijkbaar is met die hier wordt weergegeven.
<%@ Page Language="C#" Debug="true" %>
<%@ import Namespace="System.Data.SqlClient" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<script runat="server">
// <snippet2>
public void Page_Load(object Src, EventArgs E)
{
// Declare the SqlCacheDependency instance, SqlDep.
SqlCacheDependency SqlDep = null;
// Check the Cache for the SqlSource key.
// If it isn't there, create it with a dependency
// on a SQL Server table using the SqlCacheDependency class.
if (Cache["SqlSource"] == null) {
// Because of possible exceptions thrown when this
// code runs, use Try...Catch...Finally syntax.
try {
// Instantiate SqlDep using the SqlCacheDependency constructor.
SqlDep = new SqlCacheDependency("Northwind", "Categories");
}
// Handle the DatabaseNotEnabledForNotificationException with
// a call to the SqlCacheDependencyAdmin.EnableNotifications method.
catch (DatabaseNotEnabledForNotificationException exDBDis) {
try {
SqlCacheDependencyAdmin.EnableNotifications("Northwind");
}
// If the database does not have permissions set for creating tables,
// the UnauthorizedAccessException is thrown. Handle it by redirecting
// to an error page.
catch (UnauthorizedAccessException exPerm) {
Response.Redirect(".\\ErrorPage.htm");
}
}
// Handle the TableNotEnabledForNotificationException with
// a call to the SqlCacheDependencyAdmin.EnableTableForNotifications method.
catch (TableNotEnabledForNotificationException exTabDis) {
try {
SqlCacheDependencyAdmin.EnableTableForNotifications("Northwind", "Categories");
}
// If a SqlException is thrown, redirect to an error page.
catch (SqlException exc) {
Response.Redirect(".\\ErrorPage.htm");
}
}
// If all the other code is successful, add MySource to the Cache
// with a dependency on SqlDep. If the Categories table changes,
// MySource will be removed from the Cache. Then generate a message
// that the data is newly created and added to the cache.
finally {
Cache.Insert("SqlSource", Source1, SqlDep);
CacheMsg.Text = "The data object was created explicitly.";
}
}
else {
CacheMsg.Text = "The data was retrieved from the Cache.";
}
}
// </snippet2>
</script>
<html xmlns="http://www.w3.org/1999/xhtml">
<head id="Head1" runat="server">
<title>ASP.NET Example</title>
</head>
<body>
<form id="form1" runat="server">
<p>
</p>
<p>
<asp:SqlDataSource id="Source1" runat="server" SelectCommand="SELECT * FROM [Categories]" UpdateCommand="UPDATE [Categories] SET [CategoryName]=@CategoryName,[Description]=@Description,[Picture]=@Picture WHERE [CategoryID]=@CategoryID" ConnectionString="<%$ ConnectionStrings:Northwind %>"></asp:SqlDataSource>
<asp:GridView id="GridView1" runat="server" DataKeyNames="CategoryID" AllowSorting="True" AllowPaging="True" DataSourceID="Source1"></asp:GridView>
</p>
<p>
</p>
<p>
<asp:Label id="CacheMsg" runat="server" AssociatedControlID="GridView1"></asp:Label>
</p>
</form>
</body>
</html>
<%@ Page Language="VB" Debug="True" %>
<%@ import Namespace="System.Data.SqlClient" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<script runat="server">
' <snippet2>
Sub Page_Load(Src As Object, E As EventArgs)
' Declare the SqlCacheDependency instance, SqlDep.
Dim SqlDep As SqlCacheDependency
' Check the Cache for the SqlSource key.
' If it isn't there, create it with a dependency
' on a SQL Server table using the SqlCacheDependency class.
If Cache("SqlSource") Is Nothing
' Because of possible exceptions thrown when this
' code runs, use Try...Catch...Finally syntax.
Try
' Instantiate SqlDep using the SqlCacheDependency constructor.
SqlDep = New SqlCacheDependency("Northwind", "Categories")
' Handle the DatabaseNotEnabledForNotificationException with
' a call to the SqlCacheDependencyAdmin.EnableNotifications method.
Catch exDBDis As DatabaseNotEnabledForNotificationException
Try
SqlCacheDependencyAdmin.EnableNotifications("Northwind")
' If the database does not have permissions set for creating tables,
' the UnauthorizedAccessException is thrown. Handle it by redirecting
' to an error page.
Catch exPerm As UnauthorizedAccessException
Response.Redirect(".\ErrorPage.htm")
End Try
' Handle the TableNotEnabledForNotificationException with
' a call to the SqlCacheDependencyAdmin.EnableTableForNotifications method.
Catch exTabDis As TableNotEnabledForNotificationException
Try
SqlCacheDependencyAdmin.EnableTableForNotifications( _
"Northwind", "Categories")
' If a SqlException is thrown, redirect to an error page.
Catch exc As SqlException
Response.Redirect(".\ErrorPage.htm")
End Try
' If all the other code is successful, add MySource to the Cache
' with a dependency on SqlDep. If the Categories table changes,
' MySource will be removed from the Cache. Then generate a message
' that the data is newly created and added to the cache.
Finally
Cache.Insert("SqlSource", Source1, SqlDep)
CacheMsg.Text = "The data object was created explicitly."
End Try
Else
CacheMsg.Text = "The data was retrieved from the Cache."
End If
End Sub
' </snippet2>
</script>
<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
<title>ASP.NET Example</title>
</head>
<body>
<form id="form1" runat="server">
<p>
</p>
<p>
<asp:SqlDataSource id="Source1" runat="server" SelectCommand="SELECT * FROM [Categories]" UpdateCommand="UPDATE [Categories] SET [CategoryName]=@CategoryName,[Description]=@Description,[Picture]=@Picture WHERE [CategoryID]=@CategoryID" ConnectionString="<%$ ConnectionStrings:Northwind %>"></asp:SqlDataSource>
<asp:GridView id="GridView1" runat="server" DataKeyNames="CategoryID" AllowSorting="True" AllowPaging="True" DataSourceID="Source1"></asp:GridView>
</p>
<p>
</p>
<p>
<asp:Label id="CacheMsg" runat="server" AssociatedControlID="GridView1"></asp:Label>
</p>
</form>
</body>
</html>
Opmerkingen
In alle ondersteunde versies van SQL Server (Microsoft SQL Server 7.0, Microsoft SQL Server 2000 en SQL Server 2005) bewaakt de klasse SqlCacheDependency een specifieke SQL Server-databasetabel. Wanneer de tabel wordt gewijzigd, worden items die aan de tabel zijn gekoppeld, verwijderd uit de Cachetabel en wordt er een nieuwe versie van het item aan het Cacheitem toegevoegd.
De klasse SqlCacheDependency ondersteunt ook integratie met de klasse System.Data.SqlClient.SqlDependency bij het gebruik van een SQL Server 2005-database. Het querymeldingsmechanisme van SQL Server 2005 detecteert wijzigingen in gegevens die de resultaten van een SQL-query ongeldig maken en verwijdert alle items in de cache die zijn gekoppeld aan de SQL-query uit de System.Web.Caching.Cache.
U kunt de klasse SqlCacheDependency gebruiken om items toe te voegen aan de Cache van uw toepassing die afhankelijk zijn van een SQL Server databasetabel of een SQL-query wanneer u SQL Server 2005 gebruikt. U kunt deze klasse ook gebruiken met de instructie @ OutputCache om een pagina met uitvoercache of een gebruikersbesturingselement te maken dat afhankelijk is van een SQL Server databasetabel. Ten slotte kunt u de klasse SqlCacheDependency gebruiken met de pagina-instructie @ OutputCache om een pagina met uitvoercache afhankelijk te maken van de resultaten van een SQL-query wanneer SQL Server 2005 wordt gebruikt. Querymelding met SQL Server 2005 wordt niet ondersteund in de instructie @ OutputCache voor gebruikersbesturingselementen.
Note
Deze klasse werkt alleen correct wanneer u op tabellen gebaseerde meldingen gebruikt, de database en eventuele tabellen waarvoor u afhankelijkheden wilt maken, moeten meldingen zijn ingeschakeld. U kunt meldingen inschakelen door methoden van de SqlCacheDependencyAdmin klasse aan te roepen of met behulp van het aspnet_regsql.exe opdrachtregelprogramma. Daarnaast moeten de juiste configuratie-instellingen worden opgenomen in het Web.config-bestand van de toepassing.
Voor het gebruik van een SqlCacheDependency-object met SQL Server 2005-querymelding is geen expliciete configuratie vereist. Raadpleeg de SQL Server documentatie voor informatie over beperkingen voor de typen Transact-SQL query's die zijn toegestaan bij het gebruik van querymeldingen.
In het volgende voorbeeld ziet u een ASP.NET Web.config-bestand dat afhankelijkheden op basis van tabellen op een SQL Server databasetabel mogelijk maakt.
<configuration>
<connectionStrings>
<add name="Northwind" connectionString="Data Source=(local); Initial Catalog=northwind; Integrated Security=true"; providerName="System.Data.SqlClient" />
</connectionStrings>
<system.web>
<caching>
<sqlCacheDependency enabled = "true" pollTime = "60000" >
<databases>
<add name="northwind"
connectionStringName="Northwind"
pollTime="9000000"
/>
</databases>
</sqlCacheDependency>
</caching>
</system.web>
</configuration>
Constructors
| Name | Description |
|---|---|
| SqlCacheDependency(SqlCommand) |
Initialiseert een nieuw exemplaar van de klasse met behulp van de opgegeven SqlCommand instantie om een afhankelijkheid van de SqlCacheDependency cachesleutel te maken. |
| SqlCacheDependency(String, String) |
Initialiseert een nieuw exemplaar van de klasse met behulp van de opgegeven parameters om een afhankelijkheid van de SqlCacheDependency cachesleutel te maken. |
Eigenschappen
| Name | Description |
|---|---|
| HasChanged |
Hiermee wordt een waarde opgehaald die aangeeft of het CacheDependency object is gewijzigd. (Overgenomen van CacheDependency) |
| UtcLastModified |
Hiermee wordt de tijd opgehaald waarop de afhankelijkheid voor het laatst is gewijzigd. (Overgenomen van CacheDependency) |
Methoden
| Name | Description |
|---|---|
| CreateOutputCacheDependency(String) |
Hiermee maakt u een afhankelijkheidsrelatie tussen een item dat is opgeslagen in het OutputCache-object van een ASP.NET toepassing en een SQL Server databasetabel. |
| DependencyDispose() |
Publiceert de resources die worden gebruikt door de CacheDependency klasse en eventuele klassen die zijn afgeleid van CacheDependency. (Overgenomen van CacheDependency) |
| Dispose() |
Releases van de resources die door het CacheDependency object worden gebruikt. (Overgenomen van CacheDependency) |
| Equals(Object) |
Bepaalt of het opgegeven object gelijk is aan het huidige object. (Overgenomen van Object) |
| FinishInit() |
Initialisatie van het CacheDependency object wordt voltooid. (Overgenomen van CacheDependency) |
| GetFileDependencies() |
Hiermee haalt u de bestandsafhankelijkheden op. (Overgenomen van CacheDependency) |
| GetHashCode() |
Fungeert als de standaardhashfunctie. (Overgenomen van Object) |
| GetType() |
Hiermee haalt u de Type huidige instantie op. (Overgenomen van Object) |
| GetUniqueID() |
Hiermee haalt u een unieke id voor een SqlCacheDependency object op. |
| ItemRemoved() |
Aangeroepen wanneer een bewaakte cachevermelding wordt verwijderd. (Overgenomen van CacheDependency) |
| KeepDependenciesAlive() |
Hiermee wordt de laatste toegangstijd bijgewerkt van elk cache-item dat afhankelijk is van dit item. (Overgenomen van CacheDependency) |
| MemberwiseClone() |
Hiermee maakt u een ondiepe kopie van de huidige Object. (Overgenomen van Object) |
| NotifyDependencyChanged(Object, EventArgs) |
Hiermee wordt het basisobject CacheDependency aangegeven dat de afhankelijkheid die wordt vertegenwoordigd door een afgeleide CacheDependency klasse is gewijzigd. (Overgenomen van CacheDependency) |
| SetCacheDependencyChanged(Action<Object,EventArgs>) |
Hiermee voegt u een actiemethode toe voor het afhandelen van de melding dat de geïnteresseerde partij wijzigingen aan deze afhankelijkheid heeft aangebracht. (Overgenomen van CacheDependency) |
| SetUtcLastModified(DateTime) |
Markeert de tijd waarop een afhankelijkheid voor het laatst is gewijzigd. (Overgenomen van CacheDependency) |
| TakeOwnership() |
Hiermee kan de eerste gebruiker exclusief eigendom van deze afhankelijkheid declareren. (Overgenomen van CacheDependency) |
| ToString() |
Retourneert een tekenreeks die het huidige object vertegenwoordigt. (Overgenomen van Object) |