Nota
O acesso a esta página requer autorização. Podes tentar iniciar sessão ou mudar de diretório.
O acesso a esta página requer autorização. Podes tentar mudar de diretório.
O exemplo nesta secção mostra como usar SqlDependency indiretamente usando o objeto ASP.NET SqlCacheDependency . O SqlCacheDependency objeto usa um SqlDependency para ouvir notificações e atualizar corretamente a cache.
Observação
O código de exemplo assume que ativou as notificações de consulta ao executar os scripts em Ativar notificações de consulta.
Sobre o aplicativo de exemplo
A aplicação de exemplo utiliza uma única página Web ASP.NET para mostrar informações do produto da base de dados SQL Server do AdventureWorks num controlo GridView. Quando a página é carregada, o código escreve a hora atual num Label controlo. Depois define um SqlCacheDependency objeto e define propriedades no Cache objeto para armazenar os dados da cache durante até três minutos. O código liga-se então à base de dados e recupera os dados. Quando a página é carregada e a aplicação está a correr ASP.NET recupera dados da cache, o que pode verificar notando que a hora na página não muda. Se os dados monitorizados mudarem, ASP.NET invalida a cache e repreenche o GridView controlo com dados novos, atualizando o tempo apresentado no Label controlo.
Criação da aplicação de exemplo
Siga estes passos para criar e executar a aplicação de exemplo:
Crie um novo site ASP.NET.
Adicione um Label e um GridView controle à página Default.aspx.
Abra o módulo de classes da página e adicione as seguintes diretivas:
using Microsoft.Data.SqlClient; using System.Web.Caching;Adicione o seguinte código no evento da
Page_Loadpágina:// 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(); } } }Adiciona dois métodos auxiliares,
GetConnectionStringeGetSQL. A cadeia de ligação definida utiliza segurança integrada. Verifica se a conta que estás a usar tem as permissões necessárias para a base de dados e que a base de dados de exemplo,AdventureWorks, tem notificações ativadas.// 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;"; }
Testando o aplicativo
A aplicação armazena em cache os dados exibidos no formulário Web e atualiza-os a cada três minutos se não houver atividade. Se ocorrer uma alteração na base de dados, a cache é atualizada imediatamente. Executa a aplicação a partir do Visual Studio, que carrega a página no navegador. O tempo de atualização da cache apresentado indica quando a cache foi atualizada pela última vez. Espere três minutos e, em seguida, atualize a página, provocando um evento de postback. A hora apresentada na página mudou. Se atualizar a página em menos de três minutos, o tempo apresentado na página permanecerá o mesmo.
Agora atualiza os dados na base de dados usando um comando Transact-SQL UPDATE e atualiza a página. A hora apresentada indica agora que a cache foi atualizada com os novos dados da base de dados. Embora a cache seja atualizada, a hora apresentada na página não muda até ocorrer um evento de postback.