SqlDependency em um aplicativo ASP.NET
O exemplo nesta seção mostra como usar SqlDependency indiretamente utilizando o objeto ASP.NET SqlCacheDependency. O objeto SqlCacheDependency usa um SqlDependency para escutar notificações e atualizar corretamente o cache.
Observação
O código de exemplo pressupõe que você habilitou notificações de consulta executando os scripts em Habilitar as notificações de consulta.
Sobre o aplicativo de exemplo
O aplicativo de exemplo usa uma página da Web ASP.NET para exibir informações sobre o produto no banco de dados do SQL Server AdventureWorks em um controle GridView. Quando a página é carregada, o código grava a hora atual em um controle Label. Ele define um objeto SqlCacheDependency e as propriedades no objeto Cache para armazenar os dados do cache por até três minutos. O código se conecta ao banco de dados e recupera os dados. Quando a página for carregada e o aplicativo estiver em execução, o ASP.NET recuperará os dados do cache, o que você pode verificar observando que a hora na página não é alterada. Se os dados que estão sendo monitorados forem alterados, o ASP.NET invalidará o cache e preencherá novamente o controle GridView
com os dados atualizados, atualizando a hora exibida no controle Label
.
Criar o aplicativo de exemplo
Siga estas etapas para criar e executar o aplicativo de exemplo:
Criar um site do ASP.NET.
Adicione um Label e um controle GridView à página Default.aspx.
Abra o módulo de classe da página e adicione as seguintes diretivas:
using Microsoft.Data.SqlClient; using System.Web.Caching;
Adicione o seguinte código no evento
Page_Load
da pá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(); } } }
Adicione dois métodos auxiliares,
GetConnectionString
eGetSQL
. A cadeia de conexão definida usa segurança integrada. Verifique se a conta usada tem as permissões de banco de dados necessárias e se o banco de dados de exemplo,AdventureWorks
, tem notificações habilitadas.// 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
O aplicativo armazenará em cache os dados exibidos no formulário da Web e os atualizará a cada três minutos se não houver atividade. Se ocorrer uma alteração no banco de dados, o cache será atualizado imediatamente. Execute o aplicativo no Visual Studio, que carrega a página para o navegador. O tempo de atualização do cache exibido indica quando o cache foi atualizado pela última vez. Aguarde três minutos e atualize a página, fazendo ocorrer um evento de postback. A hora exibida na página foi alterada. Se você atualizar a página em menos de três minutos, a hora exibida na página permanecerá a mesma.
Agora, atualize os dados no banco de dados usando um comando UPDATE do Transact-SQL e atualize a página. A hora exibida indica que o cache foi atualizado com os novos dados do banco de dados. Embora o cache esteja atualizado, a hora exibida na página não é alterada até que ocorra um evento de postback.
Próximas etapas
Comentários
https://aka.ms/ContentUserFeedback.
Em breve: Ao longo de 2024, eliminaremos os problemas do GitHub como o mecanismo de comentários para conteúdo e o substituiremos por um novo sistema de comentários. Para obter mais informações, consulteEnviar e exibir comentários de