SqlDependency в приложении ASP.NET
В приведенном в этом разделе примере показано, как неявно применять SqlDependency, используя объект SqlCacheDependency ASP.NET. Объект SqlCacheDependency использует SqlDependency для прослушивания уведомлений и корректного обновления кэша.
Примечание
В примере кода предполагается, что уведомления о запросах включены путем выполнения скриптов из этой статьи.
Сведения о примере приложения
В примере приложения используется одна веб-страница ASP.NET для вывода сведений о продуктах из базы данных AdventureWorks SQL Server в элемент управления GridView. При загрузке страницы код записывает текущее время в элемент управления Label. Затем он определяет объект SqlCacheDependency и задает свойства объекта Cache для сохранения данных кэша до трех минут. Затем код подключается к базе данных и получает данные. При загрузке страницы и работе приложения ASP.NET будет получать данные из кэша. Чтобы проверить это, обратите внимание на время, указанное на странице, оно не должно меняться. Если наблюдаемые данные изменяются, ASP.NET делает недействительным кэш и повторно заполняет элемент управления GridView
новыми данными, обновляя время в элементе управления Label
.
Создание примера приложения
Чтобы создать и запустить пример приложения, выполните следующие действия:
Создание нового веб-сайта ASP.NET.
Добавьте Label и элемент управления GridView на страницу Default.aspx.
Откройте модуль класса страницы и добавьте следующие директивы:
using Microsoft.Data.SqlClient; using System.Web.Caching;
Добавьте следующий код в событие
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(); } } }
Добавьте два вспомогательных метода:
GetConnectionString
иGetSQL
. В определенной строке соединения используются интегрированные средства безопасности. Убедитесь, что используемая учетная запись обладает необходимыми разрешениями для базы данных, а в образце базы данныхAdventureWorks
включены уведомления.// 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;"; }
Тестирование приложения
Приложение кэширует данные, отображаемые в веб-форме, и обновляет их каждые три минуты, если нет действий. Если в базе данных происходит изменение, кэш обновляется немедленно. Запустите приложение из Visual Studio, чтобы загрузить страницу в браузер. Отображаемое время обновления кэша указывает, когда кэш был обновлен последний раз. Подождите три минуты, а затем обновите страницу, в результате чего произойдет событие обратной передачи. Время, отображаемое на странице, изменилось. Если обновить страницу меньше чем через три минуты, время, отображаемое на странице, останется прежним.
Теперь обновите данные в базе данных, используя команду Transact-SQL UPDATE, затем обновите страницу. Теперь по отображаемому времени можно понять, что кэш был обновлен с учетом новых данных из базы данных. Несмотря на обновление кэша, время на странице не изменяется, пока не произойдет событие обратной передачи.
Дальнейшие действия
Обратная связь
https://aka.ms/ContentUserFeedback.
Ожидается в ближайшее время: в течение 2024 года мы постепенно откажемся от GitHub Issues как механизма обратной связи для контента и заменим его новой системой обратной связи. Дополнительные сведения см. в разделеОтправить и просмотреть отзыв по