Share via


SqlDependency in een ASP.NET-toepassing

ADO.NET downloaden

In het voorbeeld in deze sectie ziet u hoe u indirect kunt gebruiken SqlDependency met behulp van het ASP.NET-object SqlCacheDependency . Het SqlCacheDependency object gebruikt een SqlDependency object om te luisteren naar meldingen en de cache correct bij te werken.

Opmerking

In de voorbeeldcode wordt ervan uitgegaan dat u querymeldingen hebt ingeschakeld door de scripts uit te voeren in Querymeldingen inschakelen.

Over de voorbeeldtoepassing

De voorbeeldtoepassing maakt gebruik van één ASP.NET webpagina om productinformatie weer te geven uit de AdventureWorks SQL Server-database in een GridView besturingselement. Wanneer de pagina wordt geladen, schrijft de code de huidige tijd naar een Label besturingselement. Vervolgens wordt een SqlCacheDependency object gedefinieerd en worden eigenschappen voor het Cache object ingesteld om de cachegegevens maximaal drie minuten op te slaan. De code maakt vervolgens verbinding met de database en haalt de gegevens op. Wanneer de pagina wordt geladen en de toepassing wordt uitgevoerd ASP.NET gegevens ophaalt uit de cache, die u kunt controleren door te zien dat het tijdstip op de pagina niet verandert. Als de bewaakte gegevens worden gewijzigd, maakt ASP.NET de cache ongeldig en vult het GridView besturingselement opnieuw met nieuwe gegevens, en wordt de tijd bijgewerkt die wordt weergegeven in het Label besturingselement.

De voorbeeldtoepassing maken

Volg deze stappen om de voorbeeldtoepassing te maken en uit te voeren:

  1. Maak een nieuwe ASP.NET website.

  2. Voeg een Label- en GridView-besturingselement toe aan de pagina Default.aspx.

  3. Open de klassemodule van de pagina en voeg de volgende instructies toe:

    using Microsoft.Data.SqlClient;
    using System.Web.Caching;
    
  4. Voeg de volgende code toe aan de gebeurtenis van Page_Load de pagina:

    // 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. Voeg twee helpermethoden toe, GetConnectionString en GetSQL. De gedefinieerde verbindingsreeks maakt gebruik van geïntegreerde beveiliging. Controleer of het account dat u gebruikt de benodigde databasemachtigingen heeft en of de voorbeelddatabase AdventureWorksmeldingen heeft ingeschakeld.

    // 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;";
    }
    

De toepassing testen

De toepassing slaat de gegevens in de cache op die worden weergegeven in het webformulier en vernieuwt deze elke drie minuten als er geen activiteit is. Als er een wijziging in de database optreedt, wordt de cache onmiddellijk vernieuwd. Voer de toepassing uit vanuit Visual Studio, waarmee de pagina in de browser wordt geladen. De weergegeven tijd voor het vernieuwen van de cache geeft aan wanneer de cache voor het laatst is vernieuwd. Wacht drie minuten en vernieuw de pagina, waardoor er een postback-gebeurtenis plaatsvindt. De tijd die op de pagina wordt weergegeven, is gewijzigd. Als u de pagina in minder dan drie minuten vernieuwt, blijft de tijd die op de pagina wordt weergegeven hetzelfde.

Werk nu de gegevens in de database bij met behulp van een Transact-SQL opdracht UPDATE en vernieuw de pagina. De weergegeven tijd geeft nu aan dat de cache is vernieuwd met de nieuwe gegevens uit de database. Hoewel de cache wordt bijgewerkt, verandert de tijd die op de pagina wordt weergegeven pas wanneer er een postback-gebeurtenis plaatsvindt.

Volgende stappen