Compartilhar via


Cache de dados usando controles de fonte de dados

Os controles da fonte de dados fornecem serviços de dados a controles ligados a dados, como os controles GridView, FormView e DetailsView.Esses serviços incluem armazenamento em cache de dados para ajudar a melhorar o desempenho de aplicativos nos quais os dados não se alteram com frequência.

Para armazenar dados em cache usando os controles SqlDataSource ou AccessDataSource, você deve definir a propriedade DataSourceMode desses controles para DataSet.O controle ObjectDataSource pode armazenar em cache objetos retornados pelo objeto comercial subjacente.No entanto, você não deve armazenar em cache objetos que armazenam recursos ou que mantêm estado que não pode ser compartilhado entre várias solicitações, como um objeto DataReader aberto.

Ativar cache com um controle de fonte de dados

Armazenamento em cache não é ativado por padrão para controles da fonte de dados, mas você pode ativá-lo configurando a propriedade EnableCaching do controle como true.Dados armazenados em cache são atualizados com base no número de segundos que você especifica usando a propriedade CacheDuration.

É possível refinar mais o comportamento do armazenamento em cache de um controle da fonte de dados, definindo sua propriedade CacheExpirationPolicy.Definir o valor da propriedade para Absolute força o cache a ser atualizado quando o valor CacheDuration é excedido.Definir a propriedade CacheExpirationPolicy como Sliding atualiza o cache somente se o valor CacheDuration foi excedido desde a última vez que o item em cache foi acessado.

Observação importante:

É recomendável que você defina a propriedade EnableCaching para false quando a representação de cliente é ativada e os resultados da fonte de dados são recuperados com base na identidade do cliente.Se o cache estiver ativado, dados em cache para um único usuário podem ser exibidas por todos os usuários e informações confidenciais poderiam ser expostas a uma fonte indesejada.A representação do cliente é ativada quando o atributo impersonate do elemento de configuração identidade é definido como true e a identificação anônima está desativada para o aplicativo no servidor Web.

O exemplo de código a seguir mostra um controle SqlDataSource configurado para atualizar os dados a cada 20 segundos:

<%@ 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>

Cenários de cache avançados

Se você estiver usando o controle SqlDataSource com o provedor System.Data.SqlClient, você poderá tirar proveito da classe SqlCacheDependency para garantir que os dados armazenados em cache são atualizados somente quando a tabela de origem no banco de dados foi modificada.Para obter mais informações, consulte Fazendo Cache de Dados com o Controle SqlDataSource.

Consulte também

Outros recursos

Controles Servidores da Web com fonte de dados