Nuta
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować się zalogować lub zmienić katalog.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
W przykładzie w tej sekcji pokazano, jak używać SqlDependency pośrednio przy użyciu obiektu ASP.NET SqlCacheDependency . Obiekt SqlCacheDependency używa obiektu SqlDependency do nasłuchiwania powiadomień i poprawnej aktualizacji pamięci podręcznej.
Uwaga / Notatka
Przykładowy kod zakłada, że włączono powiadomienia dotyczące zapytań, wykonując skrypty w obszarze Włączanie powiadomień o zapytaniach.
Informacje o przykładowej aplikacji
Przykładowa aplikacja używa jednej strony internetowej ASP.NET do wyświetlania informacji o produkcie z bazy danych AdventureWorks SQL Server w kontrolce GridView . Gdy strona zostanie załadowana, kod zapisuje bieżący czas do kontrolki Label . Następnie definiuje SqlCacheDependency obiekt i ustawia właściwości obiektu Cache, aby przechowywać dane pamięci podręcznej przez maksymalnie trzy minuty. Następnie kod łączy się z bazą danych i pobiera dane. Po załadowaniu strony i uruchomieniu aplikacji ASP.NET pobierze dane z pamięci podręcznej, co można sprawdzić, zauważając, że czas na stronie nie ulegnie zmianie. Jeśli monitorowane dane zmieniają się, ASP.NET unieważnia pamięć podręczną i ponownie wypełnia GridView kontrolkę świeżymi danymi, aktualizując czas wyświetlany w kontrolce Label .
Tworzenie przykładowej aplikacji
Wykonaj następujące kroki, aby utworzyć i uruchomić przykładową aplikację:
Utwórz nową witrynę ASP.NET sieci Web.
Otwórz moduł klasy strony i dodaj następujące dyrektywy:
using Microsoft.Data.SqlClient; using System.Web.Caching;Dodaj następujący kod w zdarzeniu na stronie
Page_Load:// using Microsoft.Data.SqlClient; protected void Page_Load(object sender, EventArgs e) { Label1.Text = "Cache Refresh: " + DateTime.Now.ToLongTimeString(); // Create a dependency connection to the database. SqlDependency.Start(GetConnectionString()); using (SqlConnection connection = new SqlConnection(GetConnectionString())) { using (SqlCommand command = new SqlCommand(GetSQL(), connection)) { SqlCacheDependency dependency = new SqlCacheDependency(command); // Refresh the cache after the number of minutes // listed below if a change does not occur. // This value could be stored in a configuration file. int numberOfMinutes = 3; DateTime expires = DateTime.Now.AddMinutes(numberOfMinutes); Response.Cache.SetExpires(expires); Response.Cache.SetCacheability(HttpCacheability.Public); Response.Cache.SetValidUntilExpires(true); Response.AddCacheDependency(dependency); connection.Open(); GridView1.DataSource = command.ExecuteReader(); GridView1.DataBind(); } } }Dodaj dwie metody pomocnicze,
GetConnectionStringiGetSQL. Zdefiniowane parametry połączenia używają zintegrowanych zabezpieczeń. Sprawdź, czy używane konto ma niezbędne uprawnienia do bazy danych i czy przykładowa baza danych,AdventureWorks, ma włączone powiadomienia.// using Microsoft.Data.SqlClient; private string GetConnectionString() { // To avoid storing the connection string in your code, // you can retrieve it from a configuration file. return "Data Source=(local);Integrated Security=true;" + "Initial Catalog=AdventureWorks;"; } private string GetSQL() { return "SELECT Production.Product.ProductID, " + "Production.Product.Name, " + "Production.Location.Name AS Location, " + "Production.ProductInventory.Quantity " + "FROM Production.Product INNER JOIN " + "Production.ProductInventory " + "ON Production.Product.ProductID = " + "Production.ProductInventory.ProductID " + "INNER JOIN Production.Location " + "ON Production.ProductInventory.LocationID = " + "Production.Location.LocationID " + "WHERE ( Production.ProductInventory.Quantity <= 100 ) " + "ORDER BY Production.ProductInventory.Quantity, " + "Production.Product.Name;"; }
Testowanie aplikacji
Aplikacja buforuje dane wyświetlane w formularzu sieci Web i odświeża je co trzy minuty, jeśli nie ma żadnych działań. Jeśli nastąpi zmiana bazy danych, pamięć podręczna zostanie natychmiast odświeżona. Uruchom aplikację z programu Visual Studio, która ładuje stronę do przeglądarki. Wyświetlany czas odświeżania pamięci podręcznej wskazuje, kiedy pamięć podręczna została ostatnio odświeżona. Poczekaj trzy minuty, a następnie odśwież stronę, aby wywołać zdarzenie zwrotne (postback). Czas wyświetlany na stronie uległ zmianie. Jeśli odświeżysz stronę w mniej niż trzy minuty, czas wyświetlany na stronie pozostanie taki sam.
Teraz zaktualizuj dane w bazie danych przy użyciu polecenia Transact-SQL UPDATE i odśwież stronę. Wyświetlony czas wskazuje teraz, że pamięć podręczna została odświeżona przy użyciu nowych danych z bazy danych. Chociaż pamięć podręczna jest aktualizowana, czas wyświetlany na stronie nie zmienia się do momentu wystąpienia zdarzenia postback.