SqlCacheDependency Klasa
Definicja
Ważne
Niektóre informacje odnoszą się do produktu w wersji wstępnej, który może zostać znacząco zmodyfikowany przed wydaniem. Firma Microsoft nie udziela żadnych gwarancji, jawnych lub domniemanych, w odniesieniu do informacji podanych w tym miejscu.
Ustanawia relację między elementem przechowywanym w obiekcie aplikacji Cache ASP.NET a określoną tabelą bazy danych programu SQL Server lub wynikami zapytania programu SQL Server 2005. Klasa ta nie może być dziedziczona.
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
- Dziedziczenie
Przykłady
Poniższy przykład kodu używa SqlDataSource kontrolek i GridView do wyświetlania tabeli bazy danych. Po załadowaniu strony strona próbuje utworzyć SqlCacheDependency obiekt. Po utworzeniu SqlCacheDependency obiektu strona dodaje element do Cache
obiektu z zależnością od SqlCacheDependency obiektu. Należy użyć obsługi wyjątków podobnych do pokazanych tutaj.
<%@ 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>
Uwagi
We wszystkich obsługiwanych wersjach programu SQL Server (Microsoft SQL Server 7.0, Microsoft SQL Server 2000 i SQL Server 2005) SqlCacheDependency klasa monitoruje określoną tabelę bazy danych programu SQL Server. Po zmianie tabeli elementy skojarzone z tabelą zostaną usunięte z Cacheelementu , a nowa wersja elementu zostanie dodana do elementu Cache.
Klasa SqlCacheDependency obsługuje również integrację z klasą podczas korzystania z System.Data.SqlClient.SqlDependency bazy danych programu SQL Server 2005. Mechanizm powiadamiania o zapytaniu programu SQL Server 2005 wykrywa zmiany danych, które unieważniają wyniki zapytania SQL i usuwa wszystkie buforowane elementy skojarzone z zapytaniem SQL z System.Web.Caching.Cachepliku .
Możesz użyć SqlCacheDependency klasy , aby dodać elementy do aplikacji Cache , które są zależne od tabeli bazy danych programu SQL Server lub zapytania SQL podczas korzystania z programu SQL Server 2005. Można również użyć tej klasy z @ OutputCache
dyrektywą, aby utworzyć stronę pamięci podręcznej danych wyjściowych lub kontrolkę użytkownika zależną od tabeli bazy danych programu SQL Server. Na koniec możesz użyć SqlCacheDependency klasy z dyrektywą @ OutputCache
page, aby strona w pamięci podręcznej danych wyjściowych zależeć od wyników zapytania SQL podczas korzystania z programu SQL Server 2005. Powiadomienie o zapytaniach przy użyciu programu SQL Server 2005 nie jest obsługiwane w @ OutputCache
dyrektywie dotyczącej kontrolek użytkownika.
Uwaga
Aby ta klasa działała poprawnie podczas korzystania z powiadomień opartych na tabeli, baza danych i wszystkie tabele, które mają być zależne od, muszą mieć włączone powiadomienia. Powiadomienia można włączyć, wywołując metody SqlCacheDependencyAdmin klasy lub za pomocą aspnet_regsql.exe
narzędzia wiersza polecenia. Ponadto odpowiednie ustawienia konfiguracji należy uwzględnić w pliku Web.config aplikacji.
Używanie obiektu z powiadomieniem SqlCacheDependency zapytania programu SQL Server 2005 nie wymaga żadnej jawnej konfiguracji. Zapoznaj się z dokumentacją programu SQL Server, aby uzyskać informacje o ograniczeniach typów zapytań Języka Transact-SQL, które są dozwolone podczas korzystania z powiadomień o zapytaniach.
W poniższym przykładzie przedstawiono plik ASP.NET Web.config, który umożliwia zależności oparte na tabeli bazy danych programu SQL Server.
<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>
Konstruktory
SqlCacheDependency(SqlCommand) |
Inicjuje SqlCacheDependency nowe wystąpienie klasy przy użyciu podanej SqlCommand metody w celu utworzenia zależności klucza pamięci podręcznej. |
SqlCacheDependency(String, String) |
Inicjuje SqlCacheDependency nowe wystąpienie klasy przy użyciu podanych parametrów w celu utworzenia zależności klucza pamięci podręcznej. |
Właściwości
HasChanged |
Pobiera wartość wskazującą CacheDependency , czy obiekt uległ zmianie. (Odziedziczone po CacheDependency) |
UtcLastModified |
Pobiera czas ostatniej zmiany zależności. (Odziedziczone po CacheDependency) |
Metody
CreateOutputCacheDependency(String) |
Tworzy relację zależności między elementem przechowywanym w obiekcie aplikacji OutputCache ASP.NET a tabelą bazy danych programu SQL Server. |
DependencyDispose() |
Zwalnia zasoby używane przez klasę CacheDependency i wszystkie klasy pochodzące z CacheDependencyklasy . (Odziedziczone po CacheDependency) |
Dispose() |
Zwalnia zasoby używane przez CacheDependency obiekt. (Odziedziczone po CacheDependency) |
Equals(Object) |
Określa, czy dany obiekt jest taki sam, jak bieżący obiekt. (Odziedziczone po Object) |
FinishInit() |
Kończy inicjowanie CacheDependency obiektu. (Odziedziczone po CacheDependency) |
GetFileDependencies() |
Pobiera zależności plików. (Odziedziczone po CacheDependency) |
GetHashCode() |
Służy jako domyślna funkcja skrótu. (Odziedziczone po Object) |
GetType() |
Type Pobiera bieżące wystąpienie. (Odziedziczone po Object) |
GetUniqueID() |
Pobiera unikatowy identyfikator SqlCacheDependency obiektu. |
ItemRemoved() |
Wywoływana po usunięciu monitorowanej pamięci podręcznej. (Odziedziczone po CacheDependency) |
KeepDependenciesAlive() |
Aktualizuje czas ostatniego dostępu każdego elementu pamięci podręcznej, który zależy od tego elementu. (Odziedziczone po CacheDependency) |
MemberwiseClone() |
Tworzy płytkią kopię bieżącego Objectelementu . (Odziedziczone po Object) |
NotifyDependencyChanged(Object, EventArgs) |
Powiadamia obiekt podstawowy CacheDependency , że zależność reprezentowana przez klasę pochodną CacheDependency uległa zmianie. (Odziedziczone po CacheDependency) |
SetCacheDependencyChanged(Action<Object,EventArgs>) |
Dodaje metodę Action do obsługi powiadamiania zainteresowanej strony o zmianach w tej zależności. (Odziedziczone po CacheDependency) |
SetUtcLastModified(DateTime) |
Oznacza czas ostatniej zmiany zależności. (Odziedziczone po CacheDependency) |
TakeOwnership() |
Umożliwia pierwszemu użytkownikowi deklarowanie wyłącznej własności tej zależności. (Odziedziczone po CacheDependency) |
ToString() |
Zwraca ciąg reprezentujący bieżący obiekt. (Odziedziczone po Object) |