[ASP.NET 페이지부분캐싱]ADO.NET, 사용자정의컨트롤,ascx,오라클

홈 > 공유팁! > 프로그램 관련
프로그램 관련

[ASP.NET 페이지부분캐싱]ADO.NET, 사용자정의컨트롤,ascx,오라클

꽁스짱 0 1268

[ASP.NET 페이지부분캐싱]ADO.NET, 사용자정의컨트롤,ascx,오라클


이전의 출력 캐싱(Output Caching)과 다른 점은 페이지의 일부를 사용자 정의 컨트롤로 만들어 사용자 컨트롤을 캐싱 하는 것이다. 페이지 캐싱은 전체 페이지를 캐싱하므로  비효율적일 때도 있다. 

ASP.NET에서는 부분 캐싱이라고 불리는 페이지 컨텐트의 캐싱 영역을 분리하여 출력하는 간단한 방법을 제공 한다.

1. VS.NET 새 프로젝트를 생성 한다. FragmentCaching 이라고 이름을 주자.
2. FragmentCaching.aspx 파일을 만들어 아래의 코드를 붙여 넣자.

<%@ Register TagPrefix="ucssj" TagName="DataControl" Src="datactrl.ascx" %>
<HTML>
<script language="C#" runat="server">

      void Page_Load(Object Src, EventArgs E ) {

          TimeMsg.Text = DateTime.Now.ToString("G");
      }

</script>
<body>
<h3>
<font face="Verdana">페이지 부분 캐싱</font>
</h3>
<ucssj:DataControl runat="server" ID="Datacontrol1" NAME="Datacontrol1" />
<i>페이지 마지막 생성일시:</i>
<asp:label id="TimeMsg" runat="server" />
</body>
</HTML>


3. 프로젝트에서 마우스 오른쪽 버튼을 눌러 [추가] ->  [웹 사용자 정의 컨트롤] 을 선택하여 사용자 정의 컨트롤 파일 datactrl.ascx 파일을 추가 하자. 그 내용은 다음과 같다.

<%@ Control Language="C#" AutoEventWireup="true" CodeBehind="datactrl.ascx.cs" Inherits="FragmentCaching.datactrl" %>
<%@ OutputCache Duration="10" VaryByParam="deptno" %>
<%@ Import Namespace="System.Data" %>
<%@ Import Namespace="System.Data.OleDb" %>
<script language="C#" runat="server">

    void Page_Load(Object Src, EventArgs E ) {

        String selectCmd;
        String deptno = Request["deptno"];

//부서코드에 따라 데이터 추출
        if (deptno == null)
        {
            selectCmd = "select empno, ename, sal, deptno from emp";
        }
        else
        {
            selectCmd = "select empno, ename, sal, deptno from emp where deptno = " + deptno;
        }

        string conStr = "Provider=MSDAORA;data source=ONJ;User ID=scott;Password=tiger";
        OleDbConnection myConnection = new OleDbConnection(conStr);

        OleDbDataAdapter adapter = new OleDbDataAdapter(selectCmd, myConnection);

        DataSet ds = new DataSet();
        adapter.Fill(ds);

        MyDataGrid.DataSource = new DataView(ds.Tables[0]);
        MyDataGrid.DataBind();

        
        TimeMsg.Text = DateTime.Now.ToString("G");
    }

</script>
<table cellspacing="0" cellpadding="3" rules="all" style="BORDER-LEFT-COLOR:black;BORDER-BOTTOM-COLOR:black;WIDTH:700px;BORDER-TOP-COLOR:black;BORDER-COLLAPSE:collapse;BACKGROUND-COLOR:#aaaadd;BORDER-RIGHT-COLOR:black">
<tr>
<td>
<a href="FragmentCaching.aspx?deptno=10">10번 부서</a>
</td>
<td>
<a href="FragmentCaching.aspx?deptno=20">20번 부서</a>
</td>
<td>
<a href="FragmentCaching.aspx?deptno=30">30번 부서</a>
</td>
</tr>
</table>
<p>
<ASP:DataGrid id="MyDataGrid" runat="server" Width="700px" BackColor="#CCCCFF" 
         BorderColor="Black" CellPadding="3" Font-Size="8pt" HeaderStyle-BackColor="#aaaadd" Height="153px"
Font-Names="Verdana" PageSize="5">
<HeaderStyle BackColor="#AAAADD"></HeaderStyle>
</ASP:DataGrid></p>
<p><i>컨트롤 내에서 마지막 생성 일시:</i>
<asp:label id="TimeMsg" runat="server" /></p>
 

[실행 결과]

내부의 사용자 정의 컨트롤로 만든부분은 리로드 할 때 마다 시간이 바뀌지 않는다. 10초동안 캐시 되기 때문 이다.


 
0 Comments
제목