사용자 Extender 만들기

AjaxControlToolkit…

 

-      들어가기에 앞서서

AjaxControlToolkit에서 제공하는 Extender들은 MicroSoft ASP.NET AJAX 팀이 개발하여 공개한 것이 아니라, 공개 소스형식으로 진행되어 다양한 개발자들이 참여하여 만들어 낸 결과물입니다. 그렇기에 여러분들도 직접 개발하여 사용할 수도 있습니다. 개발한 Extender ACT에 제공하여 자신의 명예를 드높일 수도 있습니다!!! 그렇기에 지금부터 간단한 Extender를 만들어 보겠습니다.

 



 






 

-      EXTENDER 개발을 위한 준비


AjaxControlExtender
폴더 안에 있는 AjaxControlExtender.vsi
ß이 파일은 Extender 개발에 도움이 되는 템플릿의 설치 파일입니다. 위 화면처럼 다음을 클릭하여 템플릿을 설치합니다.

 

 

 

 

-      Extender 개발을 위한 준비


Visual 2008
을 실행시키고, 새 프로젝트를 생성하면, 내 템플릿에 ASP.NET AJAX Control Project가 생성 되어 있는걸 확인할 수 있습니다.

제작할 Extender 기능

기능: 텍스트 박스 컨트롤에 접목하여, 입력란에 포커스가 들어오면 지정된 배경색을 나타내고, 포커스가 사라지면, 기본 배경색으로 돌아옴.

노출 속성: BackColor: 배경색으로 사용할 색상을 설정


 






STEP1)

우선 웹 사이트 프로젝트를 생성합니다.

 

STEP2)

 

 

 

 

 

 

새 프로젝트를 생성 후 ASP.NET AJAX Control Project를 생성합니다. (이렇게 웹사이트를 생성 후 AjaxControl Project를 생성한 이유는 단지 개발에 편리함 때문입니다. (따로 생성해도 Dll을 참조하기 때문에 상관은 없습니다.)

 

3가지 파일들의 역할

파일명

설명

Behavior.js

사용할 클라이언트 스크립트 로직을 담는 파일

Designer.cs

VS 디자인 타임 지원을 위한 파일

MyColortextBoxExtender.cs

Extender의 생성을 관리하고, 속성 및 서버 측 기능을 설정할 수 있게 하는 컨트롤 클래스

위와 같이 Ajax Project Control 프로젝트를 생성하면 위 3가지 파일들이 생깁니다.

 

  

 

STEP3) 제일 먼저 Extender.cs 작성

namespace AjaxControlExtender1

{

    [Designer(typeof(AjaxControlExtender1Designer))]

    [ClientScriptResource("AjaxControlExtender1.AjaxControlExtender1Behavior", "AjaxControlExtender1.AjaxControlExtender1Behavior.js")]

    [TargetControlType(typeof(TextBox))]

    public class AjaxControlExtender1Extender : ExtenderControlBase

    {

        // TODO: Add your property accessors here.

        //

        [ExtenderControlProperty]

        [DefaultValue("")]

        public string BackColor

        {

            get

            {

                return GetPropertyValue("BackColor", "");

            }

            set

            {

                SetPropertyValue("BackColor", value);

            }

        }

    }

}

 처음 열어보면 접근하기 어렵지만 친절하게 주석으로 //TODO 라고 적혀있고, 샘플 코드 또한 있으니 이것을 유용하게 사용합시다.

-      위에 화면 처럼 코드를 작성하여 BackColor 속성을 노출시킵니다. (유의점: 대소문자 구분을 확실히 합니다.)

.

STEP4) 다음 Behavior.js 작성

Type.registerNamespace('AjaxControlExtender1');

 

AjaxControlExtender1.AjaxControlExtender1Behavior = function(element) {

    AjaxControlExtender1.AjaxControlExtender1Behavior.initializeBase(this, [element]);

 

    // TODO : (Step 1) Add your property variables here

    //this._myPropertyValue = null;

    this._backColorValue = null;

}

BackColor 속성을 위해 사용할 내부 변수의 선언 합니다.

(.js 파일은 더 복잡하게 되어 있습니다. 하지만 주석으로 STEP1으로 친절하게 안내되어 있습니다. 이것 또한 샘플 코드 있으니 참고하시길 바라고, 주석 처리하거나 삭해주세요.)

 


STEP5)

// TODO: (Step 2) Add your property accessors here

    get_BackColor: function() {

        return this._backColorValue;

    },

 

    set_BackColor : function(value) {

        this._backColorValue = value;

    },

실제로 속성을 노출시키는 작업입니다.

 


STEP6)

AjaxControlExtender1.AjaxControlExtender1Behavior.prototype = {

    initialize : function() {

        AjaxControlExtender1.AjaxControlExtender1Behavior.callBaseMethod(this, 'initialize');

        // TODO: Add your initalization code here

        $addHandler(this.get_element(),"focus", Function.createDelegate(this,this._onfocus));

        $addHandler(this.get_element(),"blur", Function.createDelegate(this,this._onblur));

    },

포커스가 들어오면 배경색을 설정된 값으로 바꾸고, 빠져나가면 기본 색으로 되돌리는 기능을 제공을 위해 이벤트 처리기 등록해주는 작업입니다.

-       addHandler는 첫 번째 인자로는 이벤트를 적용할 대상 개체

-                     두 번째 인자로는 개체의 이벤트 명

-                     세 번째 인자로는 이벤트가 발생할 경우 수행할 처리기를 지정

Function.createDeletegate() 위임자를 생성 할 수 있게 해주는 함수입니다.

à현재의 코드가 Extender에 작성되고 있기 때문에 단순하게 대상 함수 명을 기입 할 수 없으며, 명시적으로 Delegate를 사용해서 사용할 메서드를 지정해 주어야 하기 때문에 이 함수를 씁니다.

 


STEP7)

// TODO: (Step 2) Add your property accessors here

    get_BackColor: function() {

        return this._backColorValue;

    },

 

    set_BackColor : function(value) {

        this._backColorValue = value;

    },

   

    _onfocus : function()

    {

    this.get_element().style.backgroundColor= this._backColorValue;

    },

    _onblur:function()

    {

    this.get_element().style.backgroundColor="";

    }

_onfocus(), _onblur() 메서드를 정의하는 작업입니다.

 

 

 

STEP8)

 Extender를 생성한 경로를 찾아 .dll 파일을 참조 시켜줍니다.

 

  

STEP9)


텍스트 박스 한 개를 디자인해 봅니다. 그리고 밑에 화면처럼 Extender를 확인해보면 생성한 Extender가 추가된 것을 확인할 수 있습니다. 

 

LAST)

 

 Extender 속성을 보면 BackColor 속성이 있다는 것을 확인 할 수 있습니다.

 저는 색상을 Aqua로 줬습니다.

 

실행화면)

 

실행 시키고, 텍스트 박스에 포커스를 두면 색상이 변화는걸 확인할 수 있고, 떼어 내면 기본 색상으로 바뀌는걸 알 수 있습니다.

 


'COMPUTER TECH > C# 실전자료' 카테고리의 다른 글

사용자 Extender 만들기  (1) 2010.08.13
ADO.NET을 이용한 데이터 접근  (0) 2010.08.13
Ajax Control Toolkit  (0) 2010.08.13
비동기 소켓 프로그래밍 (C#)  (0) 2010.08.13
SqlParameter  (0) 2010.08.13
Http method – get, post  (1) 2010.08.13
Posted by ... XJAPAN

ADO.NET을 이용한 데이터 접근

[ DATAGRID 컨트롤 ]

DataGird 컨트롤이란?

Windows Forms DataGrid 컨트롤은 일련의 행과 열에 데이터를 표시합니다. 가장 간단한 경우는 관계가 포함되지 않은 단일 테이블을 가진 데이터 소스에 데이터 표가 바인딩되는 경우입니다. 이러한 경우 데이터는 스프레드시트에서와 마찬가지로 단순한 행과 열에 나타납니다.

스크롤 가능한 표에 ADO.NET 데이터를 표시해주고, 행 및 열에 데이터 컬렉션을 표시하는 유연한 방법을 제공해줍니다.

DataGrid가 여러 개의 관련 테이블을 가진 데이터에 바인딩되어 있고 해당 테이터 표에서 탐색이 가능한 경우에는 데이터 표에서 각 행마다 확대기를 표시합니다. 확대기를 통해 사용자는 부모 테이블에서 자식 테이블로 이동할 수 있습니다. 노드를 클릭하면 자식 테이블이 표시되고 뒤로 단추를 클릭하면 원래 부모 테이블이 표시됩니다. 이런 식으로 데이터 표에서는 테이블 간의 계층 관계를 표시합니다.                                                      출처:MSDN

 

DATAGRID 컨트롤 실습 !!

STEP1)

 

-  Windows forms 응용프로그램 프로젝트를 만듭니다

STEP2) 서버 탐색기에서 데이터 베이스와 연결합니다.

STEP3)

- 처음 SqlCommand, Sqlconnection, SqldataAdapter를 사용하게 되면은 도구상자 툴에 없습니다. 메뉴바에서 도구 à 도구 상자 항목 선택을 클릭합니다 그리고 위에 스크린 화면처럼 3가지 항목을 클릭하여 확인 버튼을 누릅니다.

STEP4)

 


도구상자 툴에서 DataGrid, Button, Label, TextBox을 이용해서 위에 스크린 화면처럼 디자인을 해줍니다. 그리고 STEP3에서 클릭한 3가지 항목들이 도구상자툴에 나타났음을 알 수 있습니다.

3가지 항목들을 지금부터 사용하겠습니다.

STEP5)

 

SqlDataAdapter 툴을 form위에 DataGrid쪽으로 드래그하면은 위에 화면처럼 데이터 어댑터 구성 마법사 화면이 나타납니다. 다음을 클릭해줍니다.  중요한 데이터를 연결 문자열에 포함하시겠냐는 물음이 나타난다면 예를 클릭해줍니다.

STEP6)

 

위에 화면처럼 3가지 항목이 나타난다. 새 저장 프로시저를 만들 수도, 기존의 프로시저도 만들 수 있지만, 지금 실습할 것은 SQL문 사용이기 때문에 첫번쨰 항목을 클릭합니다.

STEP7)


쿼리문 작성기 화면이 나오는데, 쿼리문 작성을 클릭 후 추가할 테이블을 선택해줍니다.

STEP8)


그럼 쿼리 작성기에 테이블이 추가됩니다. 위에 화면처럼 모든열에 클릭하면 기본적인 SQL쿼리문이 생성됩니다.

STEP9) SqlCommand 도구 상자도 SqlDataAdapter처럼 form으로 드래그합니다.

STEP10)

위에 화면처럼 sqlDataAdapter1 쪽에 마우스 우클릭을하여 데이터 집합 생성을 클릭합니다.

 

 

 

 

 

STEP11)

STEP10을 하면 위에 화면처럼 DataSet을 구성할 수 있게 됩니다. 이 과정가지 하게 되면 전반적인 작업을 하기 위한 구성이 됩니다.

STEP12)

그럼 각각 조회, 삽입, 삭제, 수정 버튼에 맞는 소스를 구현해 봅시다. 소스를 보면 알겠지만, 간단한 쿼리문을 작성하여 ExecuteNonQuery() 메소드를 이용하여 쿼리문이 수행하게 된니다.

v   조회

참고) sqlConnection1.Open() 위에 dataSet11.Clear(); 추가해보자.

v   삽입

 

v   삭제


v   수정


'COMPUTER TECH > C# 실전자료' 카테고리의 다른 글

사용자 Extender 만들기  (1) 2010.08.13
ADO.NET을 이용한 데이터 접근  (0) 2010.08.13
Ajax Control Toolkit  (0) 2010.08.13
비동기 소켓 프로그래밍 (C#)  (0) 2010.08.13
SqlParameter  (0) 2010.08.13
Http method – get, post  (1) 2010.08.13
Posted by ... XJAPAN

Ajax Control Toolkit

Accordion, DragPanelExtender

 

   

 

@@AjaxControlToolkit 다운로드 및 적용방법!!

STEP1)

AjaxControlToolkit 다운로드 받는 곳: http://ajaxcontroltoolkit.codeplex.com/releases/view/43475


STEP2)

사이트로 들어가서 해당되는 파일을 다운로드를 받습니다. 그리고 파일이 압축되어 있는데 압축을 풀어줍니다.

압축을 풀게 되면, AjaxControlToolkit.dll 파일과 Toolkit에 대한 샘플 코드를 볼 수 있는 압축파일을 확인 할 수 있습니다.

 

 

 

STEP3)

그리고 Visual Studio 2008을 실행시고 웹사이트로 프로젝트 하나를 만듭니다.

도구상자 툴에 가서 탭 추가를 클릭합니다.

 

 

STEP4)

 

그리고 탭이름을 AjaxControlToolkit으로 해줍니다.

 

 

STEP5)

마우스 오른쪽 버튼을 클릭 후 항목 선택을 선택해 줍니다.

 

 

 

STEP6)

-선택을 하게 되면 위에 스크린 화면처럼 도구 상자 항목 선택 창이 나옵니다. 그리고 찾아보기를 클릭합니다.

STEP7)


-처음 다운로드 받은 파일의 경로를 찾아가 AjaxControlTookit.dll 파일을 선택 후 열기를 클릭합니다.

STEP8)


-여러 컨트롤과 Extender가 추가된 것을 확인 할 수 있습니다.

 지금부터 여러기능 중 Accordion DragpanelExtender를 사용해 보겠습니다.

그전에 컨트롤과 익스텐더의 차이점을 알아보겠습니다.

 

-컨트롤과 익스텐더는 어떻게 다를까?

컨트롤 UI를 가지며 독립적으로 자신의 맡은 바 임무를 수행하는 컴포넌트입니다.

익스텐더는 UI를 가지지 않으며 다른 컨트롤에 접목시켜서 특정 기능을 사용할 수 있게 하는 기능 확장 컴포넌트입니다.

 

@@DragPanelExtender 사용하기

 -여러 컨트롤과 연계하여 사용하며, 페이지 내에서 자유롭게 드래그 앤 드롭할 수 있게 합니다.

-AJAX 확장 탭에서 ScriptManager 툴을 선택 후 디자인창에 드래그 합니다.

 

-표준탭에서 Calender 툴을 선택 후 ScriptManager와 마찬가지로 디자인창으로 드래그합니다. 그러면 위에 화면처럼 달력이 나타나게 됩니다.

 

달력을 클릭하면 옆에 작은 화살표가 나타납니다. 화살표를 클릭하면, 자동서식과 Extender추가 작업이 있습니다. 일단 자동 서식을 클릭 후 원하는 모양으로 꾸민 후, Extender 추가를 클릭해보겠습니다.

-       클릭하게 되면 밑에 화면처럼 마법사 창이 나오는데, DragPanelExtender를 클릭 후 확인 !!


-적용 후, 실행을 해보면 드래그가 가능하다는 걸 확인 할 수 있습니다. DragPanel은 달력뿐만 아니라, Panel이라든지 여러 컨트롤에도 적용이 가능합니다. 한번 실습해보세요.

 

@@Accordion 컨트롤 사용하기

-       이번에는 Extender가 아닌 컨트롤도 사용해보겠습니다. Accordion 컨트롤은 웹 서버 컨트롤로서, 다중 영역(Pane)을 출력하지만, 한번에 하나의 영역만을 보여주는 컨트롤입니다. 쉽게 말해, 악기인 아코디언과 마찬가지로 열렸다 접혔다 하는 모습을 생각하시면 됩니다.


-DragPanel과 마찬가지로 처음에는 ScriptManger 툴을 디자인 창으로 드래그합니다. Ajax를 사용할 경우는 처음에는 거의 ScriptManager툴을 사용한다고 생각하시면 됩니다.

 

-도구상자에서 Accordion툴을 사용하여 디자인 창에 드래그합니다.

Accorion속성은 여러가지가 있습니다. 속성에 대한 설명은 밑에서 설명하겠습니다. 이번 실습에서는 가볍게 ContentCssClass, HeaderCssClass, FadeTransitions를 사용하겠습니다.

 

 

 

 

 

 

 

 

오류: True값으로 줘야 작동됩니다.

 

-ACCORDION에 속성에 대한 설명입니다. 참고하시고 직접 실습해보세요.

속성

설명

selectedIndex

초기에 보여질 AccordionPane 입니다.

(서수로 지정하며, 0은 첫 번째를 의미합니다)

HeaderCssClass

헤더에 적용할 CSS 클래스명입니다. Accordion에 이 속성이 지정되면 그는 전체 Pane 헤더에 적용되며, AccordionPane에 지정되면 해당 Pane에만 스타일을 적용한다.

HeaderSelectedCssClass

선택된 헤더에 적용할 CSS 클래스명

ContentCssClass

본문에 적용할 CSS 클래스명.

FadeTransitins

페이딩 변화 효과를 사용하려면 true

TransitinDuration

변화가 진행되는 밀리 초 단위의 시간

FramesPerSecond

변화 애니메이션에 사용되는 초 당 프레임 수

AutoSize

Accordion의 크기를 조절합니다.

None은 기본 크기 그대로 유지합니다

Limit은 지정된 크기(height)보다 커지지 못하게 제한을 합니다 (커질 경우, 스크롤)

Fill Pane의 크기에 맞게 실제 크기가 맞춰짐을 의미합니다

RequireOpenedPane

열려져 있는 Pane의 헤더가 클릭될 때, Pane이 닫히지 않게 합니다.

SuppressHeaderpostbacks

헤더 내부에 있는 요소의 클라이언트 측 클릭 이벤트가 일어나는 것을 막습니다.

 

-       AccordionPane 툴을 쓰기 위해 소스에 <Pane>을 추가 시킵니다. <Pane> </Pane>안에 AccordionPane툴을 추가 시켜 줍니다.

<cc1:Accordion ID="Accordion1" runat="server" ContentCssClass="content"

            HeaderCssClass="header" FadeTransitions="True">

            <Panes>

                <cc1:AccordionPane ID="AccordionPane1" runat="server">

                <Header>선문비트 1조 명단</Header>

                <Content>박중선 김정학 쿠니씨 성진용 송창은 설성훈</Content>

                </cc1:AccordionPane>

                <cc1:AccordionPane ID="AccordionPane2" runat="server">

                <Header>선문비트 2조 명단</Header>

                <Content>김영찬 유익재 성종현 오두환 윤종수 강병창</Content>

                </cc1:AccordionPane>

                <cc1:AccordionPane ID="AccordionPane3" runat="server">

                <Header>선문비트 3조 명단</Header>

                <Content>황성노 홍광수 강성길 이재욱 유해룡 이도호</Content>

                </cc1:AccordionPane>

            </Panes>

</cc1:Accordion>

-       AccordionPane 툴은 <Header> <Content>로 이루어집니다. 위 소스처럼 추가하세요.

 

 

 

-       프로젝트를 실행시켜서, 선문비트 조 명단(헤더부분)을 클릭해보시면 클릭한 부분만 늘어나고 해당되지 않은 부분은 접혀지는 것을 확인할 수 있습니다.

-       이제는 Css클래스를 선언하여 좀더 변화 시켜 보겠습니다.

(참고로 Css클래스는 웹 문서의 전반적인 스타일을 미리 저장해둔 스타일시트입니다.)

<head runat="server">

    <title>제목 없음</title>

    <style type ="text/css">

    .header

    {

       background-color:Blue;

       cursor:pointer;

       border:thin white ridge;

       color:White;

       font-weight:bold;

    }

    .content

    {

       background-color:Silver;

       padding:5px;

       border:thin white inset;

       font-size:medium;

    }

    </style>

</head>

소스의 헤더부분(Accordion 헤더부분이 아닙니다) Css클래스를 선언해줍니다. 그리고 실행시켜 보시면..


위 화면처럼 변경이 되는 것을 확인할 수 있습니다.


'COMPUTER TECH > C# 실전자료' 카테고리의 다른 글

사용자 Extender 만들기  (1) 2010.08.13
ADO.NET을 이용한 데이터 접근  (0) 2010.08.13
Ajax Control Toolkit  (0) 2010.08.13
비동기 소켓 프로그래밍 (C#)  (0) 2010.08.13
SqlParameter  (0) 2010.08.13
Http method – get, post  (1) 2010.08.13
Posted by ... XJAPAN


C#으로 작성해 본것. 열어서 확인하시길!!

'COMPUTER TECH > C# 실전자료' 카테고리의 다른 글

ADO.NET을 이용한 데이터 접근  (0) 2010.08.13
Ajax Control Toolkit  (0) 2010.08.13
비동기 소켓 프로그래밍 (C#)  (0) 2010.08.13
SqlParameter  (0) 2010.08.13
Http method – get, post  (1) 2010.08.13
DataBase에 이미지 저장 / 불러오기  (0) 2010.08.13
Posted by ... XJAPAN

 

1. SqlParameter 클래스란?

 

SqlParameter 클래스는 SqlCommand에 대한 매개변수와 관련된 클래스이다. 매개변수를 설정하고 이용하고 매개변수를 통해 값을 전달하는 등의 모든 처리를 하는 클래스라고 할 수 있다. 또한 SqlParameter 클래스는 DataSet 열에 맵핑을 하는 경우에도 이용된다.

 

- 임시쿼리에서 매개변수

 

Select type, title from titles where type=@type

 

- 저장 프로시저에서의 매개변수

 

Create proc myproc

@type varchar(20)

As

  Select type, title from titles where type=@type

 

 

2. SqlParameter 클래스의 속성

 

- SqlParameter 클래스의 Public 속성

 

속성명

설명

DbType

매개변수의 DbType을 설정하거나 가져온다.

Direction

매개변수의 입력 전용, 출력 전용, 양방향용 또는 Return 값을 받기 위한 용도인지에 대해 설정하거나 가져온다.

IsNullable

매개변수가 Null값을 허용하는지 여부를 가져오거나 설정한다.

Offset

Value 속성에 대한 오프셋을 설정하거나 가져온다.

ParameterName

SqlParameter의 이름을 가져오거나 설정한다.

Precision

Value 속성에 대한 최대 자릿수를 가져오거나 설정한다.

Scale

Value 속성의 소수 자릿수의 수를 가져오거나 설정한다.

Size

열 내부의 데이터 최대 크기를 바이트 단위로 가져오거나 설정한다.

SourceColumn

데이터 셋에 맵핑되고 Value를 로드하거나 반환하는 소스 열의 이름을 가져오거나 설정한다.

sourceVersion

Value를 로드할 때 사용할 DataRowVersion을 가져오거나 설정한다.

SqlDbType

매개변수의 SqlDbType을 가져오거나 설정한다.

Value

매개변수의 값을 가져오거나 설정한다.

l  DbType 속성

 

매개변수의 DbType을 가져오거나 설정한다. 기본 값은 문자열형이다.

 

Public DbType DbType { get; set; }

 

DbType이 유효하지 않은 DbType으로 설정된 경우에는 구문 범위에서 벗어났다는 의미의 ArgumentOutOfRangeException 예외가 발생한다.

 

l  Direction 속성

 

Direction 속성은 매개변수가 입력 전용, 출력 전용, 양방향 또는 저장 프로시저 반환 값 매개변수인지를 구분하는 ParameterDirection 값을 가져오거나 설정한다.

 

public ParameterDirection Direction { get; set; }

 

Direction 속성은 ParameterDirection 값 중의 하나로 설정되어야 한다. ParameterDirection에는 아래와 같이 4개가 있는데 이 중에 속해있지 않은 값으로 설정된 경우에는 ArgumentException 예외가 발생한다.

 

- Direction 속성 구분

Direction

설명

Input

입력 매개변수

InputOutput

입력 출력에 동시에 사용되는 매개변수

Output

출력 매개변수

ReturnValue

저장 프로시저, 기본 제공 함수, 사용자 정의 함수 등과 같은 연산에서의 Return

l  IsNullable 속성

 

자료형에 맞는 값을 매개변수가 받아서 넘겨주어야 한다. 이때 DB에서 허용된 경우라면 Null값을 입력할 수 있게 되어 있다. IsNullable속성은 매개변수가 Null 값을 허용하는지 여부를 나타내주는 속성이다. 기본 값은 false , null값이 허용되지 않은 것으로 설정되어 있다.

 

Public bool IsNullable { get; set; }

 

l  Offset, ParameterName 속성

 

Offset 속성은 Value 속성에 대한 오프셋을 가져오거나 설정한다. Offset 속성의 기본 값은 0이다. Offset 속성은 이진 및 문자열 형식에서 사용된다. 이진 형식의 바이트 수와 문자열의 문자 수를 반환하는 역할을 한다.

 

Public int Offset { get; set; }

 

ParameterName SqlParameter의 이름을 가져오거나 설정한다. ParameterName을 지정할 때는 @paramname 형태로 지정한다. 매개변수를 사용하는 SqlCommand를 실행하기 전에 ParameterName을 설정해야 한다. ParameterDirection ReturnValue인 경우에는 특별히 ParameterName이 지정되지 않는다. 이는 returnValue가 설정된 경우에는 특별히 이름이 지정되지 않기 때문이다.

 

Public string ParameterName { get; set; }

 

 

l  Precision, Scale 속성

 

Precision 속성 소수점을 가지고 있는 수의 최대 범위를 지정하기 위한 값이다. 소수점을 가진 숫자를 많이 다룰 때 Precision 속성을 설정하는 것이 효율적인 처리를 할 수 있다. SqlParameter 클래스의 Precision 속성은 Decimal SqlDbType을 갖고 있는 매개변수에서 사용되며 기본값은 0이다. Precision은 최대 자리수를 보여주거나 설정하는 역할을 한다. 소수점 아래 숫자가 있는 경우에는 이 소수점 아래의 숫자의 자리수까지 최대 자리수에 포함된다.

 

Public byte Precision { get; set; }

 

Scale 속성은 소수 자리수를 가져오거나 설정하는 속성이다. Scale속성도Precision 속성과 같이 Decimal SqlDbType을 갖고 잇는 매개변수에서 사용된다.

Public byte Scale { get; set; }

 

 

l  Size 속성

 

Size 속성을 이용하면 열 내부에 잇는 데이터의 최대 크기를 바이트 단위로 가져오거나 설정할 수 있다. 입력되는 데이터의 최대 크기를 제한하고자 할 때 사용할 수 있다. Size속성은 이진 및 문자열 형식에서 사용된다. varChar 형과 같은 가변길이의 데이터 형식의 경우의 Size 속성은 서버에 전송할 데이터의 최대 크기를 의미한다. Size값을 50으로 설정하면 문자열 값의 서버로 보낼 때 데이터의 크기를 첫 번째 50바이트로 제한할 수 있다. 문자열이 안니 데이터 형식과 ANSI 문자열 데이터 및 Size값은 바이트 수를 말하고 유니코드 문자열 데이터에서는 Size속성 값이 문자 수를 의미하게 된다. Char 형과 같은 고정폭 데이터 형식의 경우에는 Size속성은 적용되지 않는다.

 

Public int Size { get; set; }

 

l  SourceColumn, SourceVersion 속성

 

SourceColumn 속성은 데이터 셋에 맵핑되고 Value 값을 로드하거나 반환하는 소스의 열의 이름을 보여주거나 설정하는 역할을 한다.

 

Public string SourceColumn { get; set; }

 

SourceVersion 속성은 원래 또는 현재 값이 매개변수 값으로 사용되는지 여부를 결정하기 위해 업데이트 중에 단지 수정되는 경우에만 적용이 되므로 UpdateCommand에서만 사용된다. InsertCommand DeleteCommand에서는 적용되지 않는다.

 

Public DatarowVersion SourceVersion { get; set; }

 

 

l  SqlDbType, Value 속성

 

SqlDbType속성은 매개변수의 SqlDbType을 가져오거나 설정하며 기본값은 NVarChar형이다. SqldbType 속성은 DbType과 연결되어 있다. DbType을 설정하면 SqlDbType SqlDbType을 지원하도록 변경한다.

 

Public SqlDbType SqlDbType { get; set; }

 

Value 속성은 흔히 사용되는 속성으로서 매개변수의 값을 가져오거나 설정한다.

 

Public object Value { get; set; }

 

 

 

3. SqlParameter 클래스의 메소드

 

l  SqlParameter public 메소드

 

메소드

설명

CreateObjRef (MarshalByrefobject에서 상속)

원격 개체와 통신하는데 사용되는 프록시 생성에 필요한 정보가 들어있는 개체를 생성한다.

Equals (오브젝트에서 상속)

두 개의 오브젝트가 같은지 여부를 확인다.

GetHashCode

(오브젝트에서 상속)

특성 형식에 해시 함수로 사용되는 해시 코드를 생성한다.

GetLifeTimeservice

(MarshalByRefObject에서 상속)

인스턴스의 수명 정책을 제어하는 현재의 수명 서비스 개체를 검색한다.

GetType(오브젝트에서 상속)

현재 인스턴스의 타입을 가져온다.

InitializeLifetimeService (MarshalByRefObject에서 상속)

인스턴스의 수명 정책을 제어하기 위한 수명 서비스 개체를 가져온다.

ToString

parameterName을 포함한 문자열을 가져온다.

 

l  SqlParameter Protected 메소드

 

메소드

설명

Finalize (오브젝트에서 상속)

가비지 수집기에서 오브젝트가 리소스를 해제한다.

memberwiseClone (오브젝트에서 상속)

오브젝트의 단순 복사본을 생성한다.

 

 


'COMPUTER TECH > C# 실전자료' 카테고리의 다른 글

Ajax Control Toolkit  (0) 2010.08.13
비동기 소켓 프로그래밍 (C#)  (0) 2010.08.13
SqlParameter  (0) 2010.08.13
Http method – get, post  (1) 2010.08.13
DataBase에 이미지 저장 / 불러오기  (0) 2010.08.13
XML 이란???  (0) 2010.08.13
Posted by ... XJAPAN

Http method – get, post

 

GET POST Http프로토콜을 이용해서 데이터를 전달할 때 사용하는 방식이다. GET Select적인 성향을 가지고 POST는 서버의 값이나 상태를 바꾸기 위해 주로 사용되고 있다.

 

<form name = form1 method = GET action=rsponse.asp>

 

 

GET

 

GET방식은 URL을 기술하여 사이트를 방문하는 것을 말하며 서버에서 데이터를 가져와서 보여주는 용도이다. 속도는 인코딩과 디코딩의 과정이 없기 때문에 POST보다 빠르다. 데이터를 전달하는 경우 이름과 값의 쌍으로 전달된다. 쌍을 구분하기 위해서 &을 사용한다.

 

Name=JH & Job=Student

 

이런 쿼리스트링은 URL ?뒤에 이어서 전송이 된다.

 

http://localhost/Request.jsp?Name=JH&job=Student

 

데이터가 URL에 표시되므로 보안 유지가 힘들고 URL길이의 제약 때문에 많은 양의 데이터는 전송하기 힘들다. 전송방식은 정보를 URL끝에 질의 문자열로서 서버로 보낸다.

 

 

 

POST

폼에서 method POST로 지정하는 경우에 사용된다. 주로 서버의 값이나 상태를 바꾸기 위해 사용된다. 데이터는 http바디에 숨겨져서 서버로 전송된다. 데이터가 주소 URL에 표시되지 않아 보안성이 GET보다 우수하다.

 

http://localhost/Request.jsp

 

URL의 제약이 없으므로 더 많은 양의 데이터를 전송할 수 있다. 전송방식은 서버로 전송하기전에 인코딩을 하고 서버에서는 다시 디코딩 작업을 해서 각 파라미터를 구분하고 필요한 값들을 추출하는 작으로 이루어 진다.


'COMPUTER TECH > C# 실전자료' 카테고리의 다른 글

비동기 소켓 프로그래밍 (C#)  (0) 2010.08.13
SqlParameter  (0) 2010.08.13
Http method – get, post  (1) 2010.08.13
DataBase에 이미지 저장 / 불러오기  (0) 2010.08.13
XML 이란???  (0) 2010.08.13
WCF란??  (0) 2010.08.13
Posted by ... XJAPAN

 

1.     흐름

 

 

입력한 제목과 설명, 불러온 이미지를 DataBase에 저장. 입력한 제목을 선택하면 제목과 이미지 내용이 출력. 이때 내용은 Tootip을 사용하여 출력.

 

 

2.     프로젝트 구성

MyUsing – Main프로젝트

UpLoadDll – 입력된 Data DataBase에 저장하는 역할

GetListDll – 저장된 글 목록의 제목을 표시하는 역할

ViewDll – Data DownLoad하는 역할

UpLoadServer, GetListServer, ViewServer – DLL의 서버

  

3.     프로젝트 설명

A.     Table, 저장프로시저

                         i.         Table

 

                        ii.         저장프로시저

1.      DataUpLoad

 

2.      GetList
 


3.
     
DataDownLoad


B.      코드분석

 

 

MyUsing - UpLoad 수행

 

 

private void button1_Click(object sender, EventArgs e)

{

openFileDialog1.Filter = "이미지 files(*.bmp)|*.bmp";

    if (openFileDialog1.ShowDialog() == DialogResult.OK)

{

        control1.ImageSrc = openFileDialog1.FileName;

    }

}

 

private void control1_UpLoadEventHandler(MyPageData mp) //이벤트발생

{

Object obj = Activator.GetObject(typeof(UpLoadDll.Class1), "http://localhost:10300/RemoteUpLoadServer.Soap");

    UpLoadDll.Class1 dc = obj as UpLoadDll.Class1;

 

    dc.DataUpLoad(mp.UserName, mp.Title, mp.Desc, mp.ImageString);

    MessageBox.Show("UpLoad");

    this.Close()

}

 

버튼이 눌렸을 때 openFileDialog를 이용하여 *.bmp파일을 선택.

UpLoadDll을 통해 작업을 처리

 

 

UpLoadDll

 

 

public class Class1 : MarshalByRefObject

{

     public void DataUpLoad(string UserName, string title, string contents, string photoFIlepath)

     {

         byte[] photo = GetPhoto(photoFIlepath); //이미지를 저장하기 위한 함수

 

         string connString = @"Data Source=504-03\SQL2005;Initial Catalog=master;User ID=jjung1105;Password=1234";

         SqlConnection scon = new SqlConnection(connString);

 

         SqlCommand scom = new SqlCommand();

         scom.Connection = scon;

 

         scom.CommandText = "DataUpLoad";

         scom.CommandType = System.Data.CommandType.StoredProcedure;

 

         SqlParameter sparam = new SqlParameter("@UserName", SqlDbType.VarChar, 50);

         sparam.Value = UserName;

 

         SqlParameter sparam2 = new SqlParameter("@Title", SqlDbType.VarChar, 50);

         sparam2.Value = title;

 

         SqlParameter sparam3 = new SqlParameter("@Contents", SqlDbType.VarChar, 50);

         sparam3.Value = contents;

 

         SqlParameter sparam4 = new SqlParameter("@Photo", SqlDbType.Image, photo.Length);

         sparam4.Value = photo;

 

         SqlParameter sparam5 = new SqlParameter("@Size", SqlDbType.Int);

         sparam5.Value = photo.Length;

 

         scom.Parameters.Add(sparam);

         scom.Parameters.Add(sparam2);

         scom.Parameters.Add(sparam3);

         scom.Parameters.Add(sparam4);

         scom.Parameters.Add(sparam5);

 

         scon.Open();

         scom.ExecuteNonQuery();

         scom.Connection.Close();

      }

 

      public static byte[] GetPhoto(string filepath)

      {

          FileStream stream = new FileStream(filepath, FileMode.Open, FileAccess.Read);

          BinaryReader reader = new BinaryReader(stream);

 

          byte[] photo = reader.ReadBytes((int)stream.Length);   

          reader.Close();

          stream.Close();

 

          return photo;

        }

    }

 

 

매개변수로 넘어온 사용자ID, 제목, 내용, 파일경로를 저장프로시저(DataUpLoad)를 통해서 처리를 한다.

이때 bitmap파일을 DataBase에 저장해야하기 때문에 GetPhoto함수를 만들어서 FileStream을 통해 byte[]에 대입하여 처리하도록 한다.

 

 

 

MyUsing - GetList수행

 

private void DownLoad_Load(object sender, EventArgs e)

{

    Object obj = Activator.GetObject(typeof(GetListDll.Class1), "http://localhost:10400/RemoteGetListServer.Soap");

    GetListDll.Class1 gc = obj as GetListDll.Class1;

 

    ArrayList list = new ArrayList();

 

    gc.GetList("jjung", ref list);

    foreach (string s in list)

    {

        listBox1.Items.Add(s);  //리스트박스에 제목을 출력

    }

}

 

ArrayList를 선언 후 GetListDll을 통해 해당 사용자가 올린 글의 제목을 담는다. 담긴 ArrayList foreach를 통해 listbox Add한다.

 

 

GetListDll

 

 

public class Class1:MarshalByRefObject

{

public void GetList(string UserName, ref ArrayList list)

    {

        string connString = @"Data Source=504-03\SQL2005;Initial Catalog=master;User ID=jjung1105;Password=1234";

        SqlConnection scon = new SqlConnection(connString);

 

        SqlCommand scom = new SqlCommand();

        scom.Connection = scon;

 

        scom.Connection.Open();

 

        SqlDataReader sr;

 

        scom.CommandText = "GetList";

        scom.CommandType = System.Data.CommandType.StoredProcedure;

 

        SqlParameter sparam = new SqlParameter("@UserName", SqlDbType.VarChar, 50);

        sparam.Value = UserName;

 

        scom.Parameters.Add(sparam);

 

        sr = scom.ExecuteReader();

 

        while (sr.Read())

        {

            list.Add(sr.GetValue(0).ToString());

        }

        sr.Close();

        scom.Connection.Close();

}

}

 

매개변수로 넘어온 UserName을 가지고 저장프로시저(GetList)를 통해서 일치하는 글 제목을 모두 ref list Add시킨다.

 

 

 

 

MyUsing – DownLoad, View수행

 

 

private void listBox1_SelectedIndexChanged(object sender, EventArgs e) 

{

try

    {

        byte[] MyData = null;

        string desc = null;

        int ArraySize = new int();

 

        title = listBox1.SelectedItem.ToString();

        Object obj2 = Activator.GetObject(typeof(ViewDll.Class1), "http://localhost:10700/RemoteViewServer.Soap");

        ViewDll.Class1 dc = obj2 as ViewDll.Class1;

 

        dc.ScreenView("jjung", title, ref MyData, ref ArraySize, ref desc);

 

        MemoryStream ms = new MemoryStream(MyData, 0, ArraySize+1);

 

        downControl1.Title = title;

        downControl1.Desc = desc;

        downControl1.Image = Image.FromStream(ms);

        ms.Close();

        }

catch

    {

 

    }

}

 

DataBase에 저장된 Data들을 꺼내와야 하기 때문에 ViewDll을 통해 필요 조건을 가져온다. 필요 Data는 제목, 내용, 이미지를 다시 만들기 위한 byte[], int가 필요하다. Byte[], int MemoryStream을 사용해서 이미지를 다시 만든다.

 

ViewDll

 

public class Class1:MarshalByRefObject

{       

public void ScreenView(string UserName, string title, ref byte[] MyData, ref int ArraySize, ref string desc)

    {

        string connString = @"Data Source=504-03\SQL2005;Initial Catalog=master;User ID=jjung1105;Password=1234";

 

        SqlConnection scon = new SqlConnection(connString);

        scon.Open();

 

        SqlCommand scom = new SqlCommand();

        scom.Connection = scon;

 

        scom.CommandText = "DataDownLoad";

        scom.CommandType = System.Data.CommandType.StoredProcedure;

 

        SqlParameter sparam = new SqlParameter("@UserName", SqlDbType.VarChar, 50);

        sparam.Value = UserName;

 

        SqlParameter sparam2 = new SqlParameter("@Title", SqlDbType.VarChar, 50);

        sparam2.Value = title;

 

        scom.Parameters.Add(sparam);

        scom.Parameters.Add(sparam2);

 

        SqlDataReader dr = scom.ExecuteReader();

 

        while (dr.Read())

        {

            MyData = (byte[])dr.GetValue(0);

            ArraySize = MyData.GetUpperBound(0);

            desc = dr.GetValue(3).ToString();

        }

        dr.Close();

        scon.Close();           

}

}

 

매개변수로 넘어온 UserName, title을 가지고 저장프로시저(DataDownLoad)를 통해서 원하는 Data를 검색한다. 이때 이미지를 다시 만들기 위해서 ref byte[] MyData, ref int ArraySize에 값을 채워준다.

 

 

 


'COMPUTER TECH > C# 실전자료' 카테고리의 다른 글

SqlParameter  (0) 2010.08.13
Http method – get, post  (1) 2010.08.13
DataBase에 이미지 저장 / 불러오기  (0) 2010.08.13
XML 이란???  (0) 2010.08.13
WCF란??  (0) 2010.08.13
SilverLight WCF서비스 작성 & CrossDomain 해결  (0) 2010.08.13
Posted by ... XJAPAN

XML(Extensible Markup Language)

-     정의

XML(Extensible Markup Language) W3C에서 다른 특수 목적의 Markup 언어를 만드는 용도에서 권장되는 다목적 Markup 언어이다. XML SGML의 단순화된 부분집합이지만, 수많은 종류의 데이터를 기술하는 데 적용할 수 있다. XML은 주로 다른 시스템, 특히 인터넷에 연결된 시스템끼리 데이터를 쉽게 주고 받을 수 있게 하여 HTML의 한계를 극복할 목적으로 만들어졌다.

*Markup Language - 태그 등을 이용하여 데이터의 구조를 명시하는 언어의 한 가지

 

사람이 이해할 수 있으면서 애플리케이션이 해석하여 이해할 수 있는 중간위치의 범용적인 데이터 표현 언어

-     설계목적

          XML은 간단하게 인터넷을 통해 사용 가능하여야 한다.

          XML은 다양한 응용 프로그램을 지원해야 한다.

          XMLSGML과 호환되어야 한다.

          이것은 XML 문서 처리기를 쉽게 작성하게 한다.

          XML의 부가적인 기능은 되도록 최소가 되도록 한다

          XML 문서는 인간에게 합리적이며 명확하게 읽혀야 한다.

          XML 설계는 빠르게 진행되어야 한다.

          XML은 형식적이며 간결 하여야 한다.

          XML 문서는 쉽게 작성되어야 한다.

          XML Markup이 간결함을 가지는 것은 중요하지 않다.

*SGML - 전자문서가 어떠한 시스템 환경에서도 정보의 손실 없이 전송, 저장, 자동처리가 가능하도록 국제 표준화 기구(ISO)에서 정한 문서처리 표준

 

-     기본개념

          XML은 구조적인 데이터를 위한 것이다.

          XML은 다소 HTML 같이 보인다.

          XML은 텍스트이며, 읽혀지는 것만을 뜻하지 않는다.

          XML은 크기가 커진다.

          XML은 기술의 집합이다.

          XML은 새로운 기술이 아니라 발전한 기술이다.

          XMLHTML에서 XHTML로 이끌었다.

          XML은 모듈식이다.

          XMLRDF와 시맨틱 웹의 토대이다.

          XML은 라이선스 제약이 없다.

          XML은 플랫폼 독립적이고, 많은 지원이 있다.

-     특징

          정해진 태그가 존재하지 않음

          데이터와 표현 부분을 분리

          데이터 항목의 의미에 따라 데이터를 구조화

          시스템과 데이터 연결성이 뛰어남

          대소문자를 구별

          태그들은 교차되어 사용될 수 없으며 시작태그와 종료태그가 반드시 필요

 

-      구성

 

 

XML 데이터의 표기

XSL,XSLT,CSS

XML 데이터의 문법정의