Udostępnij przez


Współzależność sql w aplikacji ASP.NET

Pobieranie ADO.NET

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ę:

  1. Utwórz nową witrynę ASP.NET sieci Web.

  2. Dodaj kontrolki Label i GridView do strony Default.aspx.

  3. Otwórz moduł klasy strony i dodaj następujące dyrektywy:

    using Microsoft.Data.SqlClient;
    using System.Web.Caching;
    
  4. 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();
            }
        }
    }
    
  5. Dodaj dwie metody pomocnicze, GetConnectionString i GetSQL. 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.

Dalsze kroki