목표
페이지 내에서 SQL SERVER의 특정 테이블의 내용이 변경될 때만 해당 테이블을 표현하는 컨트롤을 다시 파싱하여 읽고 싶다. 이외의 다른 컨트롤들은 테이블 변경과 상관없이 다시 파싱하게 한다.
준비
- 사용하는 데이터베이스가 캐싱이 가능하게 만들어 줘야한다.
- web.config에 캐싱 관련 코드를 입력해야한다.
1. 데이터베이스가 캐싱이 가능하게 등록
Visual Studio 2005 Command Prompt에서 다음과 같이 입력
==== DB를 캐싱 가능하게 등록 ====aspnet_regsql -S "." -U "UserID" -P "UserPassword" -d "DBName" -ed>> DB에 AspNet_SqlCacheTablesForChangeNotification 테이블이 생성됨
==== 테이블을 캐싱 가능하게 등록 ====aspnet_regsql -S "." -U "UserID" -P "UserPassword" -d "DBName" -et -t "TableName">> AspNet_SqlCacheTablesForChangeNotification 테이블에 TableName 테이블 관련 정보가 추가됨
2. web.config에 캐싱 관련 코드 입력
<system.web>
<caching>
<sqlCacheDependency enabled="true" pollTime="1000">
<databases>
<add name="DBName" connectionStringName="ConnectionStringName" />
</databases>
</sqlCacheDependency>
</caching>
</system.web>
시작
WebUserControl 생성
1. Add New Item -> Web User Control 추가
2. 생성된 ascx 소스에서 상단에 다음 코드 추가
<%@ OutputCache Duration="999999" SqlDependency="DBName:TableName" VaryByParam="none" %>
WebPage에 WebUserControl 삽입
1. aspx 소스 상단에 다음 코드 추가
<%@ Register Src="FileName.ascx" TagName="TagName" TagPrefix="uc1" %>
2. 적당한 위치에 WebUserControl 삽입
<uc1:TagName ID="UserControlID" runat="server" />
테스트
1. TableName에 INSERT, DELETE, UPDATE와 같은 쿼리가 수행이 되면
AspNet_SqlCacheTablesForChangeNotification 테이블에 changID 필드의 값이 변경됨
2. WebUserControl 페이지에 라벨을 하나 추가하고 Page_Load에 다음 코드 삽입
3. 브라우저에서 aspx 페이지를 읽으면 현재 시간이 찍힌다. 하지만 F5든 CTRL+F5든 눌러서 새로고침을 해도 그 시간은 바뀌지 않는다. 즉 새로 파싱을 하는 것이 아니라 캐싱된 페이지를 그대로 읽는 것이다.
4. 캐싱으로 연결된 테이블의 내용을 변경하고 F5를 눌러 새로고침을 하면 시간이 업데이트 된다.
- 만약 페이지가 새로 파싱이 되면 시간이 변경될 것이다. [본문으로]
'Programming > ASP .NET' 카테고리의 다른 글
마우스 클릭 이벤트를 통해 동적으로 이미지 변경 (2) | 2007.02.28 |
---|---|
ASP 웹 페이지 최적화 (0) | 2007.02.27 |
파일 업로드 소스 (0) | 2007.02.22 |
파일 이름 검색, 변경 및 삭제 (0) | 2007.02.22 |
MSSQL 2005에 필드 암호화 하기 (0) | 2007.02.20 |