Not
Åtkomst till denna sida kräver auktorisation. Du kan prova att logga in eller byta katalog.
Åtkomst till denna sida kräver auktorisation. Du kan prova att byta katalog.
Exemplet i det här avsnittet visar hur du använder SqlDependency indirekt med hjälp av objektet ASP.NET SqlCacheDependency . Objektet SqlCacheDependency använder en SqlDependency för att lyssna efter meddelanden och uppdatera cacheminnet korrekt.
Anmärkning
Exempelkoden förutsätter att du har aktiverat frågemeddelanden genom att köra skripten i Aktivera frågemeddelanden.
Om exempelprogrammet
Exempelprogrammet använder en enda ASP.NET webbsida för att visa produktinformation från AdventureWorks SQL Server-databasen i en GridView kontroll. När sidan läses in skriver koden den aktuella tiden till en Label kontroll. Det definierar sedan ett SqlCacheDependency objekt och anger egenskaper för Cache objektet för att lagra cachedata i upp till tre minuter. Koden ansluter sedan till databasen och hämtar data. När sidan läses in och programmet körs ASP.NET hämtar data från cacheminnet, vilket du kan kontrollera genom att notera att tiden på sidan inte ändras. Om de data som övervakas ändras, ogiltigförklarar ASP.NET cacheminnet och fyller GridView kontrollen med nya data och uppdaterar tiden som visas i Label kontrollen.
Skapa exempelprogrammet
Följ dessa steg för att skapa och köra exempelprogrammet:
Skapa en ny ASP.NET webbplats.
Lägg till en Label och en GridView kontroll på sidan Default.aspx.
Öppna sidans klassmodul och lägg till följande direktiv:
using Microsoft.Data.SqlClient; using System.Web.Caching;Lägg till följande kod i sidans
Page_Loadhändelse:// 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(); } } }Lägg till två hjälpmetoder:
GetConnectionStringochGetSQL. Anslutningssträngen som definierats använder integrerad säkerhet. Kontrollera att kontot du använder har nödvändiga databasbehörigheter och att exempeldatabasen,AdventureWorks, har meddelanden aktiverade.// 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;"; }
Testa programmet
Programmet cachelagrar data som visas i webbformuläret och uppdaterar dem var tredje minut om det inte finns någon aktivitet. Om en ändring sker i databasen uppdateras cachen omedelbart. Kör programmet från Visual Studio, som läser in sidan i webbläsaren. Den cacheuppdateringstid som visas anger när cachen senast uppdaterades. Vänta i tre minuter och uppdatera sedan sidan, vilket gör att en postback-händelse inträffar. Tiden som visas på sidan har ändrats. Om du uppdaterar sidan på mindre än tre minuter förblir tiden som visas på sidan densamma.
Uppdatera nu data i databasen med hjälp av ett Transact-SQL UPDATE-kommando och uppdatera sidan. Tiden som visas nu anger att cachen har uppdaterats med nya data från databasen. Även om cachen uppdateras ändras inte tiden som visas på sidan förrän en postback-händelse inträffar.