다음을 통해 공유


SqlDataSource 컨트롤을 사용한 데이터 캐싱

업데이트: 2007년 11월

SqlDataSource 컨트롤은 가져온 데이터를 캐시할 수 있습니다. 따라서 리소스를 많이 사용하는 쿼리를 다시 실행할 필요가 없으므로 응용 프로그램의 성능을 향상시킬 수 있습니다. 캐싱은 주로 데이터가 자주 변경되지 않는 경우에 유용합니다.

또한 SqlDataSource 컨트롤을 System.Data.SqlClient 공급자와 함께 사용하는 경우 SqlCacheDependency 개체를 사용할 수 있습니다. 이렇게 하면 SelectCommand에서 반환하는 데이터가 데이터베이스에서 수정된 경우에만 SqlDataSource 컨트롤에서 캐시를 새로 고칠 수 있습니다.

SqlDataSource 컨트롤을 사용하여 캐싱 활성화

SqlDataSource 컨트롤은 DataSourceMode 속성이 DataSet으로 설정되어 있는 경우 데이터를 캐시할 수 있습니다. 캐싱은 기본적으로 사용되지 않지만 EnableCaching 속성을 true로 설정하면 사용할 수 있습니다.

캐시된 데이터는 시간 간격에 따라 새로 고쳐집니다. CacheDuration 속성을 캐시를 새로 고치기 전에 대기할 시간(초)으로 설정합니다. SqlDataSource 컨트롤은 ConnectionString, SelectCommandSelectParameters 값의 각 조합에 대해 별도의 캐시 항목을 유지 관리합니다.

CacheExpirationPolicy 속성을 설정하여 SqlDataSource 캐시의 동작을 더 세밀하게 제어할 수 있습니다. 이 값을 Absolute로 설정하면 CacheDuration 값을 초과하는 경우 캐시가 새로 고쳐집니다. CacheExpirationPolicy 속성을 Sliding으로 설정하면 캐시된 항목에 마지막으로 액세스한 이후에 CacheDuration 값이 초과된 경우에만 캐시가 새로 고쳐집니다.

다음 코드 예제에서는 20초 간격으로 데이터를 새로 고치도록 구성된 SqlDataSource 컨트롤을 보여 줍니다.

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

SqlCacheDependency 개체 사용

SqlDataSource 컨트롤은 SqlCacheDependency 개체에 따라 선택적 만료 정책을 지원합니다. SqlCacheDependency 개체를 사용하면 데이터베이스의 소스 테이블이 수정된 경우에만 캐시된 데이터를 새로 고칠 수 있습니다. SqlCacheDependency 개체를 사용하려면 데이터베이스 서버에 대해 Microsoft SQL Server 알림 서비스가 실행되고 있어야 합니다.

데이터 소스가 SQL Server 7.0 이상인 경우에는 SqlDataSource 컨트롤의 SqlCacheDependency 속성을 "ConnectionString:Table" 형식의 연결 문자열과 테이블 식별자로 구성된 문자열로 설정하여 SqlCacheDependency 개체로 데이터베이스에서 변경 내용을 폴링할 수 있습니다. SqlCacheDependency에 테이블이 두 개 이상 포함되어 있으면 다음 예제와 같이 연결 문자열과 테이블 이름 쌍이 세미콜론으로 구분됩니다.

"ConnectionString1:Table1;ConnectionString2:Table2"

사용 중인 데이터 소스가 Microsoft SQL Server 2005인 경우에는 변경 내용을 폴링하는 대신 SQL Server에서 응용 프로그램에 변경 내용을 알리도록 설정할 수 있습니다. SqlCacheDependency 속성을 "CommandNotification" 문자열로 설정하여 알림 모델을 사용할 수 있습니다. SqlCacheDependency 개체에 대한 자세한 내용은 ASP.NET에서 SqlCacheDependency 클래스를 사용한 캐싱을 참조하십시오.

다음 코드 예제에서는 Microsoft SQL Server 캐시 종속성을 만들고 SqlDataSource 컨트롤의 SqlCacheDependency 속성을 설정하는 방법을 보여 줍니다. 이 예제에서는 120초 간격으로 데이터베이스가 폴링됩니다. 이 시간 동안 Northwind Employees 테이블의 데이터가 변경되는 경우 다음에 데이터베이스가 폴링되면 SqlDataSource 컨트롤에서 캐시하고 GridView 컨트롤에서 표시하는 데이터가 새로 고쳐집니다.

<%@ Page language="vb" %>

<!--

The page uses an example configuration that includes
connection strings and a defined SqlCacheDependecy.

<?xml version="1.0"?>
<configuration>

  <connectionStrings>
    <add name="MyNorthwind"
         connectionString="Data Source="localhost";Integrated Security="SSPI";Initial Catalog="Northwind""
         providerName="System.Data.SqlClient" />
  </connectionStrings>

  <system.web>
    <cache>
      <sqlCacheDependency enabled="true">
        <databases>
          <add
            name="Northwind"
            connectionStringName="MyNorthwind"
            pollTime="120000" />
        </databases>
      </sqlCacheDependency>
    </cache>

  </system.web>
</configuration>
-->

<!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" method="post" >

        <asp:gridview
          id="GridView1"
          
          datasourceid="SqlDataSource1" />

        <asp:sqldatasource
          id="SqlDataSource1"
          
          connectionstring="<%$ ConnectionStrings:MyNorthwind%>"
          selectcommand="SELECT EmployeeID,FirstName,Lastname FROM Employees"
          enablecaching="True"
          cacheduration="300"
          cacheexpirationpolicy="Absolute"
          sqlcachedependency="Northwind:Employees" />

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

<!--

The page uses an example configuration that includes
connection strings and a defined SqlCacheDependecy.

<?xml version="1.0"?>
<configuration>

  <connectionStrings>
    <add name="MyNorthwind"
         connectionString="Data Source="localhost";Integrated Security="SSPI";Initial Catalog="Northwind""
         providerName="System.Data.SqlClient" />
  </connectionStrings>

  <system.web>
    <cache>
      <sqlCacheDependency enabled="true">
        <databases>
          <add
            name="Northwind"
            connectionStringName="MyNorthwind"
            pollTime="120000" />
        </databases>
      </sqlCacheDependency>
    </cache>

  </system.web>
</configuration>
-->

<!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" method="post" >

        <asp:gridview
          id="GridView1"
          
          datasourceid="SqlDataSource1" />

        <asp:sqldatasource
          id="SqlDataSource1"
          
          connectionstring="<%$ ConnectionStrings:MyNorthwind%>"
          selectcommand="SELECT EmployeeID,FirstName,Lastname FROM Employees"
          enablecaching="True"
          cacheduration="300"
          cacheexpirationpolicy="Absolute"
          sqlcachedependency="Northwind:Employees" />

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

<!--

The page uses an example configuration that includes
connection strings and a defined SqlCacheDependecy.

<?xml version="1.0"?>
<configuration>

  <connectionStrings>
    <add name = "NorthwindConnection" connectionString = "Data Source="localhost";Integrated Security="SSPI";Initial Catalog="Northwind"" />
  </connectionStrings>

  <system.web>

    ...

    <cache>
      <sqlCacheDependency enabled="true">
        <databases>
          <add
            name="Northwind_Remote"
            connectionStringName="NorthwindConnection"
            pollTime="120000" />
        </databases>
      </sqlCacheDependency>
    </cache>

  </system.web>
</configuration>
-->

<!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" method="post" >

        <asp:gridview
          id="GridView1"
          
          datasourceid="SqlDataSource1" />

        <asp:sqldatasource
          id="SqlDataSource1"
          
          connectionstring="Data Source=localhost;Integrated Security=SSPI;Initial Catalog=Northwind"
          selectcommand="SELECT EmployeeID,FirstName,Lastname FROM Employees"
          enablecaching="True"
          cacheduration="300"
          cacheexpirationpolicy="Absolute"
          sqlcachedependency="Northwind_Remote:Employees" />

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

참고 항목

개념

SqlDataSource 웹 서버 컨트롤 개요

기타 리소스

ASP.NET 캐싱

데이터 소스 웹 서버 컨트롤