Partager via


Mise en cache de données à l'aide de contrôles de source de données

Mise à jour : novembre 2007

Les contrôles de source de données fournissent des services de données aux contrôles liés aux données tels que les contrôles GridView, FormView et DetailsView. Ces services incluent la mise en cache des données afin d'optimiser les performances des applications dont les données changent peu.

Pour mettre en cache des données à l'aide des contrôles SqlDataSource ou AccessDataSource, vous devez affecter DataSet à la propriété DataSourceMode de ces contrôles. Le contrôle ObjectDataSource peut mettre en cache des objets retournés par l'objet métier sous-jacent. Toutefois, vous ne devez pas mettre en cache des objets détenant des ressources ou conservant un état qui ne peut pas être partagé par plusieurs demandes, par exemple un objet DataReader ouvert.

Activation de la mise en cache avec un contrôle de source de données

La mise en cache n'est pas activée par défaut dans les contrôles de source de données, mais vous pouvez l'activer en affectant à la propriété EnableCaching du contrôle la valeur true. Les données mises en cache sont actualisées en fonction du nombre de secondes spécifié à l'aide de la propriété CacheDuration.

Vous pouvez affiner davantage le comportement de mise en cache d'un contrôle de source de données en définissant sa propriété CacheExpirationPolicy. Lorsque la valeur de la propriété est Absolute, un dépassement de la valeur de CacheDuration force l'actualisation du cache. Affecter à la propriété CacheExpirationPolicy la valeur Sliding n'actualise le cache que si la valeur CacheDuration a été dépassée depuis la dernière fois que l'on a accédé à l'élément mis en cache.

Remarque importante :

Il est recommandé d'affecter à la propriété EnableCaching la valeur false lorsque l'emprunt d'identité du client est activé et que les résultats de la source de données sont récupérés sur la base de l'identité du client. Si la mise en cache est activée, les données en cache relatives à un seul utilisateur peuvent être consultées par tous les utilisateurs et des informations sensibles pourraient être exposées à une source non désirée. L'emprunt d'identité du client est activé lorsque l'attribut impersonate de l'élément de configuration identity a la valeur true et que l'identification anonyme est désactivée pour l'application sur le serveur Web.

L'exemple de code suivant montre un contrôle SqlDataSource configuré pour actualiser les données toutes les 20 secondes :

<%@ Page language="VB" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml" >
    <head >
    <title>ASP.NET Example</title>
</head>
<body>
        <form id="form1" >

            <asp:SqlDataSource
                id="SqlDataSource1"
                
                DataSourceMode="DataSet"
                ConnectionString="<%$ ConnectionStrings:MyNorthwind%>"
                EnableCaching="True"
                CacheDuration="20"
                SelectCommand="SELECT EmployeeID,FirstName,LastName,Title FROM Employees">
            </asp:SqlDataSource>

            <asp:GridView
                id="GridView1"
                
                AutoGenerateColumns="False"
                DataSourceID="SqlDataSource1">
                <columns>
                    <asp:BoundField HeaderText="First Name" DataField="FirstName" />
                    <asp:BoundField HeaderText="Last Name" DataField="LastName" />
                    <asp:BoundField HeaderText="Title" DataField="Title" />
                </columns>
            </asp:GridView>

        </form>
    </body>
</html>
<%@ Page language="C#" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml" >
    <head >
    <title>ASP.NET Example</title>
</head>
<body>
        <form id="form1" >

            <asp:SqlDataSource
                id="SqlDataSource1"
                
                DataSourceMode="DataSet"
                ConnectionString="<%$ ConnectionStrings:MyNorthwind%>"
                EnableCaching="True"
                CacheDuration="20"
                SelectCommand="SELECT EmployeeID,FirstName,LastName,Title FROM Employees">
            </asp:SqlDataSource>

            <asp:GridView
                id="GridView1"
                
                AutoGenerateColumns="False"
                DataSourceID="SqlDataSource1">
                <columns>
                    <asp:BoundField HeaderText="First Name" DataField="FirstName" />
                    <asp:BoundField HeaderText="Last Name" DataField="LastName" />
                    <asp:BoundField HeaderText="Title" DataField="Title" />
                </columns>
            </asp:GridView>

        </form>
    </body>
</html>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml" >
    <head >
    <title>ASP.NET Example</title>
</head>
<body>
        <form id="form1" >

            <asp:SqlDataSource
                id="SqlDataSource1"
                
                DataSourceMode="DataSet"
                ConnectionString="Data Source=localhost;Integrated Security=SSPI;Initial Catalog=Northwind;"
                EnableCaching="True"
                CacheDuration="20"
                SelectCommand="SELECT EmployeeID,FirstName,LastName,Title FROM Employees">
            </asp:SqlDataSource>

            <asp:GridView
                id="GridView1"
                
                AutoGenerateColumns="False"
                DataSourceID="SqlDataSource1">
                <Columns>
                    <asp:BoundField HeaderText="First Name" DataField="FirstName" />
                    <asp:BoundField HeaderText="Last Name" DataField="LastName" />
                    <asp:BoundField HeaderText="Title" DataField="Title" />
                </Columns>
            </asp:GridView>

        </form>
    </body>
</html>

Scénarios de mise en cache avancés

Si vous utilisez le contrôle SqlDataSource avec le fournisseur System.Data.SqlClient, vous pouvez tirer parti de la classe SqlCacheDependency afin de garantir que les données en mémoire cache sont actualisées uniquement lorsque la table source de la base de données a été modifiée. Pour plus d'informations, consultez Mise en cache de données avec le contrôle SqlDataSource.

Voir aussi

Autres ressources

Contrôles serveur Web de sources de données