레이블이 오라클닷넷인 게시물을 표시합니다. 모든 게시물 표시
레이블이 오라클닷넷인 게시물을 표시합니다. 모든 게시물 표시

2013년 10월 4일 금요일

[오라클 어드민, 오라클관리자,오라클제어파일]ORACLE제어파일, Control 파일관리, 오라클컨트롤파일

[오라클 어드민, 오라클관리자,오라클제어파일]ORACLE제어파일, Control 파일관리, 오라클컨트롤파일



Control File의 역할
- 데이터베이스의 물리적 구조를 기록한다.
- 데이터베이스 이름, 데이터 및 로그 파일의 이름 및 위치 등의 정보를 갖고 있다.
- 데이타베이스 생성시간
- 체크포인트 정보

1. 제어파일의 이름 지정
- DB의 매개변수파일의 control_file parameter를 사용하여
 제어파일의 이름을 정한다.

 예를들면 configSID.ora file안의 내용을 간단히보면 다음과 같다.
 Solaris용 7.3.3의 경우
 
 #
 # $Header: cnfg.orc 1.1 95/02/27 12:14:25 wyim Osd $ Copyr (c) 
 1992 Oracle
 #
 # cnfg.ora - instance configuration parameters

 control_files          = (/usr2/oradata/control01.ctl,
                            /usr2/oradata/control02.ctl,
                            /usr2/oradata/control03.ctl)
 # Below for possible future use...
 #init_sql_files          = (?/dbs/sql.bsq,
 #                          ?/rdbms/admin/catalog.sql,
 #                          ?/rdbms/admin/expvew.sql)
 background_dump_dest    = /usr2/oracle/oracle/bdump
 core_dump_dest                  = /usr2/oracle/admin/cdump
 user_dump_dest                  = /usr2/oracle/admin/udump



 db_name                = myDB

2. 제어파일의 다중화
- 모든 Oracle DB는 최소한 서로다른 저장된 두개의 control file을 가지고
 있어야 한다.

- DB 매개변수 파일의 control_files 매개변수에 두개 이상의 제어파일을
 나열한다.

- DB 작업중 Oracle7 Server는 control_file 매개변수에 나열된 첫번째
 파일만을 읽는다.

- DB작업중 사용할수 없는 제어파일이 생기면 인스턴스는 더이상 작동할수
 없으며 중단해야 한다.

- 다중화의 유일한 단점은 Datafile추가나 checkpoint 지정과 같이
 제어파일을 갱신하는 시간이 길어지는 단점이 있다.

3. 올바른 제어파일의 배치
- control file의 복사본을 각기 다른 Disk Driver에 저장해야 한다.
 또한 Online RedoLog가 다중화되면 온라인 리두로그의 멤버를 저장하고
 있는 모든 디스크 드라이버에 제어파일의 복사본을 저장해야 한다.
 이렇게 함으로서 모든제어파일과 온라인 리두로그 그룹이 단일 디스크
 고장으로 인해 손실될 위험을 줄일수 있다.

4. 제어파일의 크기
- 주 결정요소는 연관된 Database를 생성하는 create database명령에서
 지정한 maxdatafiles, maxlogfiles, maxlogmembers, maxloghistory
 밑 maxinstances 매개변수에 설정된 값이다. 이러한 매개변수 값을
 증가시키면 제어파일의 크기가 증가된다.

1. 초기제어파일의 생성
- DB생성중에 사용하는 매개변수 파일의 control_files 매개변수에
 하나 이상의 파일이름을 지정하여 Oracle 초기제어 파일을 생성한다.
 이미 제어파일이 OS에 존재한다면 create database 명령어에
 controlfile reuse라는 option을 사용해야 한다.
 control_files parameter를 수정하여 제어파일을 추가하거나
 수정할수 있다.
 
2. 현재 제어파일의 추가복사본을 다중화하거나 이동방법
- DataBase를 종료한다.
- OS명령어를 사용하여 기존 제어파일을 다른 위치로 복사한다.
- 매개변수 파일의 control_files parameter를 수정한다.
- DataBase를 재시작한다.

3. 새제어파일 생성
- DataBase의 모든 Datafile과 온라인 리두로그 파일의 목록을 생성한다.
 만약 이러한 목록을 모르는 상황에서 제어파일이 훼손되어 DataBase를 
 Open할수 없는 상황을 맞이 한다면 모든 데이타파일과 리두로그 파일의
 위치를 일일이 지정해야 한다.
- DataBase를 종료한다.(normal option을 사용할것, 만약 shutdown normal
 이 안된다면 immediate로 종료후 다시 시닥항후 shutdown normal로 DataBase를
 ShutDown 시킨다.)
- DataBase의 모든 Datafile과  Online RedoLog file을 백업한다.
- 새 인스턴스를 시작, 마운트나 Open은 하지말것(startup nomount)
- create control file명령으로 새제어파일을 생성한다.
 create controlfile 명령어는 지정된 DataFile과 온라인 리두로그
 파일을 훼손 시킬 가능성이 있다. 파일명을 생력하면 해당 파일의 Data를
 손실하거나 전체 DB에 대한 Access 손실이 발생할수도 있다.
 새제어파일이 생성되면 이부분에서 지정하지 않은 파일의 복구는 불가능하며
 또한 SYSTEM Tablespace를 구성하는 파이릉ㄹ 생략하면 DB의 복구는
 불가능하다.
- Offline 저장영역 장치에 새제어파일의 백업본을 저장한다.
- DB의 복구가 필요하다면 복구한다.
- DataBase를 연다.
 
4. 제어파일의 삭제
- DataBAse를 종료한다.
- 매개변수 파일의 control_files parameter를 수정하여 기존 제어파일의
 이름을 제거한다.
- DataBase를 다시 Open한다.

5. Mirror Control Files on Different Disks
 모든 ORACLE 데이타베이스는 각 다른 디스크에 저장되었던, 최소한 두 제어 화일
 이 있을 것이다. 만약 제어 화일이 디스크 failure에 손상 되었다면,associated
 instance는 shut down 되어야 한다. 만일 디스크 드라이브에서 고쳤다면, 손상
 되는 제어 화일은 제어 화일의 완전 복사를 사용 저장될 수 있었으며 instance는
 재 start 될 수 있었다;  no media recovery는 요구 한다. mirror 되는 제어 화
 일을 사용 하는 것에 의하면, 디스크 failure가 데이타베이스 server에 발생 되
 면 불필요 문제를 회피해야 한다.

 mirror되는 제어 화일의 효능

  * 둘 혹은 많은 화일명은 데이타베이스의 매개변수 화일에 있는 초기 매개변수
    CONTROL_FILES 에 리스트 되어 있다.
  * CONTROL_FILES 매개변수에 리스트 되는 첫번째 화일은 데이타베이스
    operation 하는 동안 ORACLE Server에서의 화일만 읽는 것이다.
  * 만약 제어 화일의 어느 것이든 데이타베이스 operation 하는 동안 이용할 수
    없는 것을 이용하면, instance는 실시할 수 없는 것으로 되며 삭제하게 될 것
    이다.


오라클자바커뮤니티에서 설립한 개발자교육6년차 오엔제이프로그래밍 실무교육센터
(오라클SQL,튜닝,힌트,자바프레임워크,안드로이드,아이폰,닷넷 실무개발강의)  




2013년 9월 12일 목요일

실무교육센터 (오라클SQL,튜닝,힌트,자바프레임워크,안드로이드,아이폰,닷넷 실무개발강의) www.onjprogramming.co.kr Unix에서 오라클 환경 변수 설정된 환경 변수를 확인 하기 위해서는 다음과 같이 합니다. env | grep –e ORA –e TNS -------------------------- Oracle Env

[UNIX오라클강좌교육]유닉스에서 오라클 환경변수 설정, unix oracle 환경변수 unix oracle env


오라클자바커뮤니티에서 설립한 개발자교육6년차 오엔제이프로그래밍 실무교육센터
(오라클SQL,튜닝,힌트,자바프레임워크,안드로이드,아이폰,닷넷 실무개발강의) 

Unix에서 오라클 환경 변수

설정된 환경 변수를 확인 하기 위해서는 다음과 같이 합니다.

env | grep e ORA e TNS


--------------------------
Oracle Environment Variables
--------------------------

LD_LISRARY_PATH : library file에 대한 경로(예를 들면/usr/lib:/use/openwin/lib:$ORACLE_HOME/lib:use/games/lib)

ORACLE_BASE : 모든 ORACLE Products에 대한 BASE DIRECTORY에 대한 FULL PATH

ORACLE_HOME : 현재 사용중인 오라클 버전에 대한 FULL PATH, 오라클이 인스톨되어 있는 기본 디렉토리,  데이터베이스 이름은 ORACLE_SID로 사용 됩니다. ORACLE_HOME은 모든 오라클 Products에서 사용 되어 지며 coraenv 또는 oraenv 스크립트에 위해 setting 됩니다.

ORACLE_PATH : files location에 대한 경로, 만약 값이 setting 되어 있으면 응용 프로그램은$ORACLE_PATH 부터 먼저 검색, 그다음 현재 디렉토리를 하게 됩니다. 만약 setting 되어 있지 않으면 현재 디렉토리를 먼저 검색 합니다.

ORACLE_TERM : 터미널 정의에 대한 것, 값이 setting 되어 있지 않으면 기본적으로 TERM environment 값이 사용됩니다.

ORAENV_ASK : 이 값이 YES이면 ORACLE_SID에 대해 묻지 않습니다. 이 변수는 oraenv가 스크립트로 불리어 지기 전까지는 NO로 setting 합니다. 즉 oraenv를 실행했을 때 ORACLE_SID,ORACLE_HOME을 물어볼 지를 지정하며, NO 이외의 경우는 모두 물어 봅니다.

TNS_ADMIN : tnsnames.ora, sqlnet.ora 파일과 같은 TNS 파일에 대한 경로 이름

ORACLE_TRACE 인스톨 시에 Verification/Trace(shell 에 의한 작업이 모두 화면출력)를 작동시킬지 않을지를 지정, T 이면 작동하고 그 외의 경우는 작동 하지 않습니다.

TWO_TASK :  원격의 DB에 대한 접속 시 사용하는 SQL*Net Connect String에 대한 정의,  SQL*Net은TWO_TASK 변수를 체크하여 자동으로 그 값을 connect string의 뒤에 add 합니다.

아래의 예를 참고 하세요~

sqlplus scott/tiger@wink

and

export TWO_TASK=wink; sqlplus scott/tiger

[출처]오라클자바커뮤니티 - oraclejavanew.kr


오라클자바커뮤니티 추천 실무 개발 전문 강좌 - 개인80% 환급



2013년 9월 8일 일요일

닷넷, C#, ASP.NET 사용자정의컨트롤,닷넷교육,ASP.NET교육,C#교육

닷넷, C#, ASP.NET 사용자정의컨트롤,닷넷교육,ASP.NET교육,C#교육
사용자 정의 컨트롤은 반복해서 사용하는 UI를 별도의 컨트롤 파일로 분리하기 위해 사용 하며 동작하는 방식은 ASP.NET 페이지와 동일 하지만 페이지의 일부로서 구성되는 컨트롤 이다. 결국 ASP.NET 사용자 정의 컨트롤은 ASP.NET 페이지의 일부를 컨트롤화 한 것 이라고 보면 된다.

사용자 정의 컨트롤은 유저 컨트롤(Web User Control) 이라고 하며 웹 페이지의 일부로 <HTML> 태그 블록을 포함 하지는 않지만 스크립트와 HTML 요소를 포함 할 수 있는 것이다. 그러나 웹 페이지의 일부 이므로 독립적인 실행은 불 가능 하다. 한번 작성된 컨트롤은 여러 페이지나 여러 곳에 사용 될 수 있다.

이 컨트롤을 사용하는 대표적인 이유는 각각의 페이지에서 반복적으로 사용되는 고정적인 어떤 독립 모듈을 위해서 이다. 예를 들어 사이트 하단에 위치하는 CopyRight 문구, 사이트 상단의 고정적인 메뉴 등을 위해서 쓰일 수 있는 것이다. 대부분의 사이트에서 메뉴를 쉽게 관리 하기 위해 메뉴 페이지를 모든 웹페이지에 반복적으로 하드 코딩 하기 보다는 분리된 프레임 구조로 나누어서 처리 하곤 한다.

일관성을 위해 프레임을 이용하는 것은 나쁜 구조는 아니지만 프레임에 의존 하는 사이트는 Contents의 양이 늘어나는 경우 확장 하거나 관리가 어렵다는 단점이 있다. 특히 하나의 페이지 내에서 데이터 교환을 할 경우 발생 하지 않는 문제가 프레임으로 나눌 경우 생기게 되어 불편 함을 야기 한다. 이럴 경우 사용자 컨트롤을 이용하게 되면 유용하게 해결 할 수 있다.

ASP.NET에서 사용자 컨트롤은 자그마한 ASP.NET 페이지 이다. 작은 페이지와 같은 개념이므로 사용자 정의 컨트롤의 작성은 ASP.NET 페이지를 만드는 것과 동일 하며 차이점이 있다면 실행 될 수 없다는 것이다. 이 또한 어쨌든 컨트롤 이므로 이를 호스트 하는 웹 페이지가 반드시 존재해야 한다는 것이다.

ASP.NET은 사용자 정의 컨트롤을 위해 ‘ascx’ 라는 특별한 확장 자를 준비해 두었다. 확장자만 ‘ascx’ 일뿐  aspx 페이지와 거의 동일 하다. 심지어 기존에 제작해 둔 aspx 페이지를 ascx로 변환도 가능 하다. 즉 사용자 정의 컨트롤은 ascx 확장 자를 가진 사용자 정의 컨트롤 파일과 ascx.cs 확장자를 가진 Code Behind 파일을 가질 수 있으며물론 단일 파일로도 구성이 가능 하다. 사용자 정의 컨트롤은 <%@ Control ~~~ %> 지시어 부, <script> , <Table>등의 요소부로 구성 된다. 네임 스페이스의 등록 사용이 가능 하며 이벤트 핸들러의 사용도 가능 하다. 또한 사용자 정의 컨트롤은 웹 페이지의 일부 이므로 <HTML></HTML>은 없다. 사용자 정의 컨트롤 내에 여러 가지 서버 컨트롤을 포함 시켜 하나의 컨트롤 처럼 만들어 웹 페이지에 인스턴스를 만들어 사용 할 수 있다.



-----------------------
사용자 정의 컨트롤의 제작
-----------------------
1. 새 프로젝트를 시작 하고 C# , ASP.NET 웹 응용 프로그램을 선택
(프로젝트 이름은 MyControl로 하자)
2. 프로젝트에서 마우스 오른쪽 버튼을 눌러 새항목 추가 à 웹 사용자 정의 컨트롤을 선택 한다. (파일의 이름을 “CopyRight.ascx”로 하자.)

3. 웹 폼 페이지와 비슷한 화면이 나타나는데 기존 웹 폼을 만들 때와 비슷하게 동작한다. 여러 서버 컨트롤을 올려 놓을 수도 있고, 해당 서버 컨트롤들의 이벤트 코드도 기존과 동일 한 방식으로 작성 할 수 있다. 단지 주의해야 할 점이 있다면 이 페이지는 <HTML> 이나 <BODY>, <FORM> 태그는 가질 수 없다는 것이다. 이 페이지는 웹폼 페이지에 포함 되어 짐으로 그러하다현재의 VS.NET 디자이너 모드를 HTML 모드로 바꾼  후 아래의 코드가 보일 것이다.

<%@ Control Language="c#" AutoEventWireup="false" Codebehind="CopyRight.ascx.cs" Inherits="MyControl.CopyRight" TargetSchema="http://schemas.microsoft.com/intellisense/ie5"%>

지시자의 시작이 @Page가 아닌 @Control로 코드가 시작 하고 있음을 확인 할 수 있다. @Control ASP.NET 페이지 파서 및 컴파일러에게 알려주는 사용자 정의 컨트롤(ascx) 관련 특성을 규정 하는 구역으로 ASP.NET 웹 페이지의 @Page와 동일한 기능을 수행 한다고 보면 된다.

이제 HTML을 작성해 보자(아래 처럼)

<hr align="center" size="1" color="black" width="95%">
<p align="center">
   &copy;CopyRight 2004 <a href="http://www.oraclejava.co.kr">OracleJava</a>
   All Right Reserved.
</p>

간단한 HTML 문장이다. 첫 번째 예제는 간단히 만들어 보도록 하자. 이제 완료가 되었으니 컨트롤을 사용해 보도록 하자. 자체적으로는 실행 될 수 없으니 실행을 위해서는 반드시 호스트 되어 져야 한다. 이제 솔루션 탐색기에서 새로운 새 폼을 추가 하여 (기존에 있는 Webform1.aspx 를 이용해도 무방 하다.) 이름을  CopyRightTest.aspx 라고 하자.

4. 사용자 정의 컨트롤을 추가 하기 위해서 웹 폼 페이지의 상단에 아래의 코드를 추가 해야 한다.

<%@ Register TagPrefix=”UC” TabName=”CopyRight” Src=”CopyRight.ascx” %>

이 부분은 웹페이지에 사용자 정의 컨트롤을 등록하는 코드 이다. 등록이란 사용자 정의 컨트롤을 웹 페이지가 식별이 가능 하도록 접두어(prefix)를 부여 하고 소스 파일의 경로를 지정 하는 것을 말한다. 이를 위해서는 @Register 라는 지시어를 사용 해야 한다. @Register 3가지의 속성이 있는데 이중 TagPrefix는 사용자 정의 컨트롤을 웹페이지에 등록 할 때 사용할 접두어를 의미하고 TagName은 컨트롤의 이름을, Src에는 이 컨트롤 파일의 경로를 지정 해야 한다.

사용자 정의 컨트롤을 등록 하는 것을 알았으니 이제는 살제 컨트롤이 들어 갈 위치에 어떻게 삽입 되는지 확인해 보자.

<UC:CopyRight id=”cr1” runat=”server”>

정리한 웹 폼의 HTML 소스 코드는 다음과 같다.

<%@ Page language="c#" codebehind="CopyRightTest.aspx.cs" Inherits="MyControl.WebForm1"  AutoEventWireup="false" %>
<%@ Register TagPrefix="UC" TagName="CopyRight" Src="CopyRight.ascx" %>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" >
<HTML>
   <HEAD>
         <title>CopyRightTest</title>
   </HEAD>
   <body>
         <form id="Form1" method="post" runat="server">
               <UC:CopyRight id="cr1" runat="server"></UC:CopyRight>&nbsp;
         </form>
   </body>
</HTML>


사용자 정의 컨트롤이 <form> 태그 안쪽에 오는 것을 유심히 보자. 지금과 같이 서버 컨트롤이 없는 경우엔 <form> 밖에 와도 무방 하지만 대부분의 경우 ASP.NET Server Control을 이용 하므로 <form> 태그 내부에 위치 해야 한다.

5.  이제 실행해 보도록 하자. 다음과 같은 결과가 나타날 것이다.

 
   
----------------------------------
테이블 동적 생성 사용자 정의 컨트롤
-----------------------------------
테이블을 동적으로 꾸며주는 사용자 정의 컨트롤을 제작 해 보자. 이 컨트롤은 내부적으로 <ASP:Table> 코드를 사용 했으며 외부로는 그 Table 서버  컨트롤을 제어 할 수 있는 4개의 기능을 이용하여 사용자 정의 컨트롤 내의 테이블을 원하는 대로 동적으로 꾸미게 할 것이다. 4개의 기능은 다음과 같다.

속성
BgColor : 테이블의 배경색 설정
ForeColor : 테이블의 전경색 설정

메소드
AddHeader(string[] values) : 테이블의 헤더 레코드를 삽입하는 메소드
AddRow(string[] values) : 테이블의 실제 레코드를 삽입하는 메소드

1.  새 프로젝트를 하나 만들자.(프로젝트명은 MyTable, C# , ASP.NET 웹 응용 프로그램으로 제작 하자.)
2.  솔루션 탐색기의 프로젝트에서 마우스 우측 버튼을 눌러 TableUserControl.ascx 라는 웹 사용자 정의 컨트롤을 추가 하자. 그런 다음 도구상자에서 HTML Table을 선택하여 폼으로 올리자.

Table의 속성을 아래와 같이 정의 하자.

ID : Table1
BorderColor : Black
Cellpadding : 10
CellSpacing : 0
GridLines : Both

3.  Code Behind로 이동하여 2개의 속성을 먼저 작성 하자.

public string BgColor {
      set {
            Table1.BackColor = Color.FromName(value);
      }
}

public string ForeColor {
      set {
            Table1.ForeColor = Color.FromName(value);
      }
}

위의 코드는 BgColor라는 속성으로 들어오는 사용자의 지정 값을 Table1 컨트롤의 BackColor 속성에 지정 함으로서 실제 출력될 테이블의 배경색을 지정 하며  ForeColor라는 속성으로 들어오는 문자열을 Table의 전경색으로 지정 한다. 이 코드에서 중요한 점은 속성값으로 들어오는 문자열을 Color 클래스의 FromName() Static Method를 통해 실제 Color 타입으로 변환 하는 것이다. ASP.NET Table 개체의 BackColor ForeColor는 그 값으로 Color 타입의 데이터를 원하기 때문에 위와 같은 작업은 반드시 필요하다.

4.  속성은 위와 같이 정리 되었으므로 이번에는 2개의 메소드를 추가 해 보자. 우선 테이블에 새로운 행을 추가하는 AddRow라는 메소드부터 알아보자.

public void AddRow(string[] values)
{
      int len = values.Length;
      TableRow tr = new TableRow();
      TableCell td;

      for(int i=0; i < len; i++)
      {
            td = new TableCell();
            td.Text = values[i];
            tr.Cells.Add(td);      
}
      Table1.Rows.Add(tr);
}


이 메소드는 테이블에 하나의 행을 추가하고 그 행을 인자로 들어 오는 문자열 배열의 수 만큼 열로 채우는 역할을 한다. 테이블이 몇 개의 인자를 가지게 될지는 인자로 들어오는 문자열 배열에 의해 결정 된다.

5.  이번에는 AddHeader() 라는 메소드를 추가해 보자. 이 메소드는 테이블의 헤더를 작성 하는 역할을 한다. 이 예제에서는 AddRow()를 다시 호출 하는 것으로 기능을 정리하자.

public void AddHeader(string[] values)
{
      int len = values.Length;
      TableRow tr = new TableRow();
      TableCell td;

      for(int i=0; i < len; i++)
      {
            td = new TableCell();
            td.Text = values[i];
            tr.Cells.Add(td);
      }
      tr.Cells = Color.FromName("gray");
      Table1.Rows.Add(tr);
}

AddRow와 같은 기능이지만 tr의 배경색만 원하는 것으로 지정 했다.

6.  이제 사용자 정의 컨트롤의 제작은 끝이 났다. 다음으로 이를 이용하는 웹 폼을 하나 만들어 보자. 이름은 TableUserControlTest.aspc 라고 하고(기존에 있는 WebForm1.aspx의 이름을 바꾸기로 하자.)  그 폼위에 TableUserControl.ascx 사용자 정의 컨트롤을 드래그 앤 드롭 하여 올려보자.



현재 상태로도 페이지를 컴파일 하고 실행 할 수 있겠지만 결과로는 아무것도 나타나지 않을 것이다. 화면에 뭔가가 출력되길 바란다면 출력 할 데이터를 준비 한 다음 그 데이터를 가지고 TableUserControl의 기능들을 적절히 호출 해 주어야 한다. 코드 비하인드로 이동하여 보자. 분명 웹 폼위에 TableUserControl을 올려 두었음에도 그 컨트롤의 선언은 존재 하지 않고 있다. 이는 다른 웹 폼 컨트롤과 달리 사용자 정의 컨트롤은  VS.NET이 자동으로 그 개체의 선언을 코드 비하인드에 추가해 주지 않기 때문이다. 결국 수작업으로 추가해 주어야 한다.

클래스 선언 바로 밑에 다음과 같이 컨트롤을 선언 하도록 하자.주의 할 점은 사용자 정의 컨트롤의 변수 명이 HTML에 올려놓은 지정 한 사용자 정의 컨트롤의 ID와 같아야 한다는 점이다. (기본적으로 TableUserControl1 이라고 되어 있다.)

protected TableUSerControl TableUserControl1;

그런 다음 Page_Load 이벤트에 아래의 코드를 작성 하자.


private void Page_Load(object sender, System.EventArgs e)
{
      // 여기에 사용자 코드를 배치하여 페이지를 초기화합니다.
      string[] header = {"이름", "이메일", "직업", "성별"};
      TableUserControl1.AddHeader(header);

      string[] data = new string[4];

      data[0] = "오엔제이";
      data[1] = "gagil@onjprogramming.kr";
      data[2] = "디자이너";
      data[3] = "남자";

      TableUserControl1.AddRow(data);

      data[0] = "오라클자바커뮤니티";
      data[1] = " oraclejava@onjprogramming.kr ";
      data[2] = "프로그래머";
      data[3] = "남자";

      TableUserControl1.AddRow(data);
}


7.  전체 코드는 아래와 같다.

[TableUserControl.ascx HTML]
<%@ Control Language="c#" AutoEventWireup="false" Codebehind="TableUserControl.ascx.cs" Inherits="TableUserControl.TableUserControl" TargetSchema="http://schemas.microsoft.com/intellisense/ie5"%>
<FONT face="굴림">
      <asp:Table id="Table1" runat="server" BorderColor="Black" CellPadding="10" CellSpacing="0"
            GridLines="Both"></asp:Table></FONT>

[TableUserControl.ascx.cs]
namespace TableUserControl
{
      using System;
      using System.Data;
      using System.Drawing;
      using System.Web;
      using System.Web.UI.WebControls;
      using System.Web.UI.HtmlControls;

      /// <summary>
      ///         TableUserControl에 대한 요약 설명입니다.
      /// </summary>
      public class TableUserControl : System.Web.UI.UserControl
      {
            protected System.Web.UI.WebControls.Table Table1;

            private void Page_Load(object sender, System.EventArgs e)
            {
                  // 여기에 사용자 코드를 배치하여 페이지를 초기화합니다.
            }

            public string BgColor
            {
                  set
                  {
                        Table1.BackColor = Color.FromName(value);
                  }
            }

            public string ForeColor
            {
                  set
                  {
                        Table1.ForeColor = Color.FromName(value);
                  }
            }

            public void AddRow(string[] values)
            {
                  int len = values.Length;
                  TableRow tr = new TableRow();
                  TableCell td;

                  for(int i=0; i < len; i++)
                  {
                        td = new TableCell();
                        td.Text = values[i];
                        tr.Cells.Add(td);
                  }

                  Table1.Rows.Add(tr);
            }

            public void AddHeader(string[] values)
            {
                  int len = values.Length;
                  TableRow tr = new TableRow();
                  TableCell td;

                  for(int i=0; i < len; i++)
                  {
                        td = new TableCell();
                        td.Text = values[i];
                        tr.Cells.Add(td);
                  }
                  tr.BackColor = Color.FromName("gray");
                  Table1.Rows.Add(tr);
            }


            #region Web Form 디자이너에서 생성한 코드
            override protected void OnInit(EventArgs e)
            {
                  //
                  // CODEGEN: 이 호출은 ASP.NET Web Form 디자이너에 필요합니다.
                  //
                  InitializeComponent();
                  base.OnInit(e);
            }
           
            /// <summary>
            ///         디자이너 지원에 필요한 메서드입니다. 이 메서드의 내용을
            ///         코드 편집기로 수정하지 마십시오.
            /// </summary>
            private void InitializeComponent()
            {
                  this.Load += new System.EventHandler(this.Page_Load);

            }
            #endregion
      }
}

[TableUserControlTest.aspx HTML]
<%@ Register TagPrefix="uc1" TagName="TableUserControl" Src="TableUserControl.ascx" %>
<%@ Page language="c#" Codebehind="TableUserControlTest.aspx.cs" AutoEventWireup="false" Inherits="TableUserControl.WebForm1" %>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" >
<HTML>
      <HEAD>
            <title>WebForm1</title>
            <meta content="Microsoft Visual Studio .NET 7.1" name="GENERATOR">
            <meta content="C#" name="CODE_LANGUAGE">
            <meta content="JavaScript" name="vs_defaultClientScript">
            <meta content="http://schemas.microsoft.com/intellisense/ie5" name="vs_targetSchema">
      </HEAD>
      <body MS_POSITIONING="GridLayout">
            <form id="Form1" method="post" runat="server">
                  <uc1:TableUserControl id="TableUserControl1" runat="server"></uc1:TableUserControl></form>
      </body>
</HTML>

[TableUserControlTest.aspx.cs]
using System;
using System.Collections;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Web;
using System.Web.SessionState;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.HtmlControls;

namespace TableUserControl
{
      /// <summary>
      /// WebForm1에 대한 요약 설명입니다.
      /// </summary>
      public class WebForm1 : System.Web.UI.Page
      {
            protected TableUserControl TableUserControl1;
            private void Page_Load(object sender, System.EventArgs e)
            {
                  // 여기에 사용자 코드를 배치하여 페이지를 초기화합니다.
                  string[] header = {"이름", "이메일", "직업", "성별"};
                  TableUserControl1.AddHeader(header);

                  string[] data = new string[4];

                  data[0] = "가길동";
                  data[1] = "gagil@test.co.kr";
                  data[2] = "디자이너";
                  data[3] = "남자";

                  TableUserControl1.AddRow(data);

                  data[0] = "나길동";
                  data[1] = "nagil@test.co.kr";
                  data[2] = "프로그래머";
                  data[3] = "남자";

                  TableUserControl1.AddRow(data);
            }

            #region Web Form 디자이너에서 생성한 코드
            override protected void OnInit(EventArgs e)
            {
                  //
                  // CODEGEN: 이 호출은 ASP.NET Web Form 디자이너에 필요합니다.
                  //
                  InitializeComponent();
                  base.OnInit(e);
            }
           
            /// <summary>
            /// 디자이너 지원에 필요한 메서드입니다.
            /// 이 메서드의 내용을 코드 편집기로 수정하지 마십시오.
            /// </summary>
            private void InitializeComponent()
            {   
                  this.Load += new System.EventHandler(this.Page_Load);

            }
            #endregion
      }
}

[실행결과]





-------------------------------
UserControl aspx로 변경
-------------------------------
이번에는 앞에서 만든 CopyRight.aspx 파일을 ASP.NET 웹페이지로 변경해 보자.

1. CopyRight.ascs 파일의 확장자를 aspx로 변경 하고, 경고 창이 나타나면 라고 하자.
2. 아래와 같은 HTML 소스에서
<%@ Control Language="c#" AutoEventWireup="false" Codebehind="CopyRight.ascx.cs" Inherits="MyControl.CopyRight" TargetSchema="http://schemas.microsoft.com/intellisense/ie5"%>

Control Page, CopyRight.ascx.cs CopyRight.aspx.cs 로 바꾸자

3. 코드 비하인드로 이동하여 아래를 확인 하자.
public class CopyRight : System.Web.UI. UserControl
에서 UserControl Page로 바꾸면 끝이다.

4. 만약 ASP.NET 페이지를 사용자 정의 컨트롤로 바꾸고 싶다면 @Page 지시자를 @Control 지시자로 바꾸고 . CodeHehind 속성을 적절히 수정 한 후 사용자 정의 컨트롤은 <HTML>, <BODY>, <FORM>등을 가질 수 없으므로 그러한 부분을 삭제하고 코드 비하인드에서 System.Web.UI.UserControl 이라고 바꾸면 된다.

출처:오라클자바커뮤니티(www.oraclejavanew.kr)


오라클자바커뮤니티 추천 실전강좌 - 개인80%환급


C#4.0, ADO.NET, Network 프로그래밍 4일 32시간   09-24
C#,ASP.NET마스터 8일 56시간   09-25
ASP.NET4.0 MVC 프로그래밍 4일 32시간   09-30
C#,ASP.NET마스터 18일 54시간   09-25
ASP.NET4.0 MVC 프로그래밍 11일 33시간   09-26
C#4.0, ADO.NET, Network 프로그래밍 11일 33시간   09-30
C#,ASP.NET마스터 8일 56시간   09-14
C#4.0, ADO.NET, Network 프로그래밍 4일 32시간   09-28
ASP.NET4.0 MVC 프로그래밍 4일 32시간   09-28