1 sur 1 ont trouvé cela utile - Évaluez ce sujet

Utilisation de SqlDependency dans une application ASP.NET

Le scénario suivant montre comment utiliser SqlDependency indirectement en tirant parti de l'objet SqlCacheDependency ASP.NET. L'objet SqlCacheDependency utilise l'objet SqlDependency et se charge d'écouter les notifications et de mettre correctement le cache à jour.

Création de l'exemple

L'application exemple utilise une simple page Web ASP.NET pour afficher un ensemble d'enregistrements depuis la base de données dans un contrôle GridView. Pendant le chargement de la page, elle insère l'heure actuelle dans une étiquette, sur la page. Ensuite, elle définit un objet SqlCacheDependency et les propriétés de l'objet Cache pour stocker les données du cache pendant trois minutes au maximum. Puis elle se connecte à la base de données et extrait un ensemble d'enregistrements. Au premier affichage de la page, le code s'exécutera. Pendant les trois minutes suivantes (au maximum), la page proviendra du cache qui peut être vérifié en notant que l'heure affichée sur la page ne change pas. Si toutefois les données surveillées sur le serveur changent, ASP.NET invalidera le cache et le remplira de nouveau.

Pour créer l'exemple

  1. Créez un projet de site Web.

  2. Ajoutez un Label et un contrôle GridView à la page.

  3. Ouvrez le module de classe de la page et ajoutez le code suivant en tête du fichier, au-dessus de la définition de classe :

[Visual Basic]

Option Strict On

Imports System.Data.SqlClient

[C#]

using System.Data.SqlClient;

using System.Web.Caching;

  1. À l'événement Page_Load de la page, ajoutez le code suivant :

[Visual Basic]

Label1.Text = "Cache Refresh: " & _

Date.Now.ToLongTimeString()

' Create a dependency connection to the database

SqlDependency.Start(GetConnectionString())

Using connection As New SqlConnection(GetConnectionString())

Using command As New SqlCommand(GetSQL(), connection)

Dim dependency As 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.

Dim numberOfMinutes As Integer = 3

Dim expires As Date = _

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()

End Using

End Using

[C#]

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();

}

}

  1. Ajoutez deux méthodes d'assistance, GetConnectionString et GetSQL. La chaîne de connexion définie utilise une sécurité intégrée. Vous devez vérifier que le compte que vous utilisez dispose des autorisations de base de données nécessaires et que les notifications sont activées dans l'exemple de base de données, AdventureWorks. Pour plus d'informations, voir Query Notifications Special Considerations.

[Visual Basic]

Private Function GetConnectionString() As String

' To avoid storing the connection string in your code,

' you can retrive it from a configuration file.

Return "Data Source=localhost;Integrated Security=SSPI;" & _

"Initial Catalog=AdventureWorks;"

End Function

Private Function GetSQL() As String

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

End Function

[C#]

private string GetConnectionString()

{

// To avoid storing the connection string in your code,

// you can retrieve it from a configuration file.

return "Data Source=localhost;Integrated Security=SSPI;" +

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

}

L'application met en cache les données affichées sur le formulaire Web et l'actualise toutes les trois minutes. En cas de modification de la base de données, le cache est immédiatement actualisé.

Démarrez l'application à partir de Visual Studio, qui ouvre le site Web dans Internet Explorer. Notez l'heure d'actualisation du cache affichée. Cette heure indique la dernière mise à jour du cache. Attendez trois minutes et rechargez la page ; notez le changement d'heure.

À présent, mettez à jour les données de la base de données à l'aide des commandes Transact-SQL ou du programme Data Updater créé à la rubrique Utilisation de SqlDependency dans une application Windows et rechargez la page. L'heure d'actualisation du cache indique alors que le cache a été automatiquement actualisé avec les données actuelles de la base de données.

Voir aussi

Cela vous a-t-il été utile ?
(1500 caractères restants)
Contenu de la communauté Ajouter
Annotations FAQ