ASP

 

MS -SQL   테이블 생성

 

product.sql

create table product
(
	idx int IDENTITY(1,1) primary key,
  pid nvarchar(50) ,
	pname nvarchar(50),
  price int,
  pstate nvarchar(10),
  regdate datetime default GETDATE()

)


insert into product ( pid , pname, price, pstate ) values( 'm_010101', '서류가방' , 30000, '구매');

insert into product ( pid , pname, price, pstate ) values( 'm_010102', '2단우산' , 40000, '구매');

 

 

 

conDb.asp

<!--#include virtual="./asp-shoppingMall/braverokmc/include/header.asp" -->
</head>
<body>
<%
    ' 데이터베이스 연결'

      Set DbConn =Server.CreateObject("ADODB.Connection")
      DbConn.Open "PROVIDER=SQLOLEDB;DATA SOURCE=localhost;UID=braverokmc;PWD=1111;DATABASE=braverokmc "
      Set objRs =DbConn.Execute("Select * from product")
%>

<div class="rows">
  <div class="col-xs-12 col-sm-12">
    <div class="col-xs-3 col-sm-3"></div>
    <div class="col-xs-6 col-sm-6">
        <p>&nbsp;</p><h3 class="text-center">상품 목록</h3><p>&nbsp;</p>
        <table class="table">
           <tr>
             <th>번호</th>
             <th>제품명</th>
             <th>제품코드</th>
             <th>가격</th>
             <th>구입 유무</th>
             <th>구입 일자</th>
           </tr>
           <%
              Do while (Not objRs.eof)
                Response.Write "<tr>"
                  For Index=0 to (objRs.fields.count -1)
                    Response.Write "<td>" & objRs(Index) & "</td>"
                  Next
                 Response.Write "</tr>"
                 objRs.MoveNext
              Loop
              objRs.close
              Dbconn.close
           %>
        </table>


    </div>

  </div>


</div>


</body>
</html>

 

 

 

 

 

코드를 살펴보자.

      Set DbConn =Server.CreateObject("ADODB.Connection")
      DbConn.Open "PROVIDER=SQLOLEDB;DATA SOURCE=localhost;UID=braverokmc;PWD=1111;DATABASE=braverokmc "

 

데이터 베이스를 연다.

 

Set objRs =DbConn.Exectue("Select * from product" )

 

SQL 문을 실행하고 결과 값인 레코드 셋을 objRs 객체 변수에 저장한다.

 

* Do While 반복문 부분

레코드 셋에서 현재 레코드가 마지막 레코드인지를 검사한 후 마지막 레코드까지 각 필드 값을 출력한다.

 

* objRs.MoveNext

다음 레코드로 이동한다.

 

* objRs.close

DbConn.close

레코드 셋과 데이터베이스 연결을 닫는다.

 

 

 

 

    레코드 셋 사용하기   

 

Recordset 객체란 ASP 에서 데이터베이스를 다루기 위해 사용하는 명령문의 결과값으로 얻어지는 레코드 셋을 다루는 객체이다.

 

1. Recordset 객체의 구성 요소

메소드

Open  - 레코드 셋에서 커서 열기

Close - 열린 레코드 셋과 관련 객체 닫기

AddNew - 새로운 레코드 생성

Delete - 현재 레토드 삭제

Update - 레코드 셋에 있는 레코드의 수정

Move  - 현재 레코드의 위치 이동

MoveFirst - 처음 레코드로 이동

MoveLast - 마지막 레코드로 이동

MoveNext - 다음 레코드로 이동

Suppert - 메서드의 사용 가능 유무

MovePrevious - 이전 레코드로 이동

 

프로퍼티

AbsolutePage  - 현재 레코드가 있는 절대 페이지 또는 옮길 절대 페이지 번호

AbsolutePosition - 현재 레코드의 순서 위치

ActiveConnection  - 레코드 셋에 있는 Connection 객체

BOF  - 현재 레코드 위치가 첫 번째 레코드 위치이면 참

EOF - 마지막 레코드 다음에 현재 레코드가 위치하면 참

CusorType - 레코드 셋에서 사용하는 커서 타입

LockType - 편집중에 레코드에 지정한 락 타입

PageSize - 하나의 페이지를 구성하는 데이터의 페이지 수

PageCount - 레코드 셋이 가지고 있는 데이터의 페이지 수

RecordCount - 현재 레코드 셋에 있는 레코드 수

 

 

2. 레코드 셋의 결과값 저장하기

레코드 셋은 SQL 문이나 저장 프로시저 등의 명령을 수행하였을 경우 그 명령어에 대한 결과값으로 생성된다.

따라서 레코드 셋의 저장은 Set 명령어를 사용하여 객체 변수에 그값을 할당하면 된다.


 

Set objRS =DbConn.Execute  "Select * From product " 

 

 

 

3. Recordset 객체 생성하기

데이터베이스를 항상 연결해서 사용할 필요가 없는 경우에는 Recordset 객체를 생성한 후 명령을 실행하여 레코드 셋을 구할 수 있다.

레코드 셋의 객체를 다음과 같은 형식으로 생성한다.

 

<%

  Set objRs =Server.CreateObject("ADODB.RecordSet")



%>



 

 

 

4. 레코드 셋 열기

Recordset 객체 생성한 후 레코드 셋을 열기 위해서는 Open 메서드를 사용한다.

형식은 다음과 같다.

 

레코드셋 객체 변수. Open  Soruce,  ActiveConnection, CursorType, LockType, Options

각 인자는 다음과 같다.

 

Source  - 세 가지 명령형(SQL 문장 저장 프로시저, 테이블) 중 실행할 문자열 (예 : SQL 명령문인 경우  " Select * from Product" )

ActiveConnection - 생성된 Connection 객체 혹은 DSN 명

CursorType - 커서 타입

LockType - 락 타입

 

CursorType 프로퍼티를 생략할 경우 디폴값은 adOpenForwadOnly 커서 타입의 ADO 상수 값이 사용되며,  이 커서 타입은 레코드

셋에서 순서대로 한 번씩 각 레코드를 참조한다.

 

adOpenStatic  - 정 적 커서  :   고정된 형태의 레코드 셋을 제공한다.

adOpenForwardOnly  -  전진 전용 커서  : 레코드를 순차적으로 전진하면서 볼 수 있다.

adOpenKeySet  키셋 커서 - 레코드 셋이 갱신되지만 다른 사용자가 추가한 레코드를 볼 수 없다.

adOpenDynamic  다이내믹 커서 - 레코드 셋을 열어서 사용하고 있는 순간에도 다른 사용자가 추가, 수정, 삭제한 내용을 모두

갱신한다.

 

 

5. LockType 에서 지정할 수 있는 락킹 상수

동시에 여러 명의 사용자가 하나의 레코드 값을 수정할 경우 문제가 발생할 수 있으므로 한 사용자가 수정하고 있는 동안 다른 사용자가

접근할 수 없도록 하는 것이 락킹이다.

 

adLockReadOnly - 데이터를 수정할 수 없으며 읽기 전용이다.

adLockPesssimistc  - 레코드 단위로 락킹을 하며, 레코드를 수정하는 순간부터 락킹한다.

adLockOptimistic  - 레코드 단위로 락킹을 하며, Update 메서드를 요구하는 순간에만 락킹한다.

adLockBatchOptimistic  - 배치 Update 메서드를 요구하는 순간에만 락킹한다.

 

Options 에서 지정할 수 있는 명령형은 다음과 같다.

adCmdText - SQL 문장과 같은 텍스트 명령어 저의 (상수 값 : 1)

adCmdTable - 레코드 셋을 생성할 테이블 이름 ( 상수 값 : 2)

adCmdStoredProc - 데이터 소스내의 저장 프로시저 ( 상수 값 : 3) 

 

예  - Recordset 객체의 인자를 먼저 지정하고 Open 메서드를 사용한 경우

<%

    Set objRs =Server.CreateObject("ADODB.Recordset")
    objRs.Source ="Select * From product"
    objRs.ActiveConnection ="ow1"
    objRs.Options =adCmdText
    objRs.Open



%>

 

예 - Open 메서드에서 인자를 지정한 경우

<%

    Set objRs =Server.CreateObject("ADODB.Recordset")
    objRs.Open  "Select * From product ", "ow1", ,, adCmdText


%>



 

 

6. Close 메서드로 레코드 셋 닫기

레코드 셋의 사용이 끝나면 Close 메서드를 사용하여 레코드 셋을 닫아준다. 객체를 닫고 난 후에는 레코드 셋 객체 변수에 Nothing 을

지정해서 객체가 사용한 모든 리소스를 제거해준다.

 

<%

   objRs.close

  Set  ObjRS =Nothing

%>

 

 

7. 레코드 셋 이용하기

 

(1) 레코드 이동하기

레코드를 이동하기 위해서는 Move 메서드를 사용한다.  Move 메서드는 현재 레코드에서 상대 위치로 몇 개씩 이동할 수 있다.

음수 값을 지정하면 뒤로 이동하며, 양수 값을 지정하면 앞으로 레코드를 이동시킨다.  예를 들어 현재 레코드 위치가 5라면

<%

   objRs.Move 8

%>

 

로 설정하면 8 번째 레코드로 이동할 것이다.

 

레코드 셋에서 이동은 커서 타입에 따라 달라진다. 디폴트 커서 타입은 adOpenForwardOnly 커서 타입일 경우 앞으로만 이동할 수 있으므로

adOpenStatic 을 열어야 레코드의 위치를 원하는 만큼 이동할 수 있다.

 

RecordSet 객체는 Move 메서드 외에 MoveFirst(처음 레코드로 이동),  MoveLast(마지막 레코드로 이동) , MoveNext(다음 레코드로 이동),

MovePrevious (이전 레코드로 이동 ) 메서드를 제공한다.  이 중에서 자주 사용되는 메소드는 MoveNext 메소드로 레코드 내용을 

페이지 순서대로 보여줄 때 이용한다.

 

참고. 

레코드 셋의 현재 위치를 알아내려면 Recordset 객체의 AbsolutePosition 프로퍼티를 사용하면 현재 위치 값을 리턴한다.

 

참고.

 액세스의 북마크 기능을 이용하여 레코드를 이동할 수도 있다.  Move 메서드에서 북마크 값을 인자로 넘겨서 이것을 기준으로

상대적 이동이 가능하다. 북마크를 사용한 예는 다음과 같다.

 

<%

    Bookmark=objRs.Bookmark

     objRs.Move 1, BookMark

%>

 

현재 레코드의 위치가 마지막 레코드인 경우 Move 메서드 사용하여 이동하려고 한다면 오류가 발생할 것이다.

이런 경우에는 항상 EOF 프로퍼티를 사용하여 마지막 레코드인지를 확인하고 이동하면 된다. 이렇게 레코드의 범위를 지정하여

범위 내에서 이동할 수 있돌고 Recordset 객체에서 제공하는 것이 BOF(Beginning Of File) 와 EOF (End of File) 프로퍼티다.

 

BOF 프로퍼티  -  현재 레코드 포인터가 처음 레코드 전에 위치하면 참 값을 가진다. BOF 가 참일때 이전 레코드로 이동하려고 하면

오류가 발생한다.

EOF 프로퍼티 - 현재 레코드 포인터가 마지막 레코드를 넘어선 위치에 있으면 참 값을 가진다. EOF가 참일 때 이후 레코드로 이동하려고

하면 오류가 발생한다.

 

레코드 셋에서 반복문을 상요할 때는 보통 Do While  문과 MoveNext 메서드를 사용한다. 반복할 때만다 EOF 프로퍼티를 사용하여

마지막 레코드인지를 확인한 후 반복을 계속한다.

 

레코드 셋이 가진 레코드 수를 알아보기 위해서는 RecordCount 프로퍼티를 사용하며, 보다 정확한 개수를 구하려면 MoveLast 메서드를

사용한  후 하는 것이 좋다.

 

 (2) 레코드 수정하기

Update 메서드 - 수정한 레코드 셋을 저장할 때 사용한다. 

<%

    objRs("name") ="ananymous"
    objRs("tel") ="000-0000"
    objRs.Update

%>


 

AddNew 메서드  - 레코드 셋에 새로운 레코드를 추가할 때 사용한다. 

<%

   objRs.Addnew
   objRs("name") ="ananymous"
   objRs("tel") ="000-0000"

%>

 

Delete 메서드 - 레코드 셋에서 레코드를 삭제할 때 사용한다.    예는 다음과 같다.

<%
   objRs.Delete
   objRs("name") ="ananymous"
   objRs("tel") ="000-0000"

%>

 

 

주의 

 Support 메서드 -  레코드 셋에서 레코드를 삭제할 경우, 레코드 셋은 삭제가 가능한 커서 타입이어야 한다. 그렇지 않을 경우

오류가 발생하며 이를 방지하기 위해서 먼저 확인할 수 있는 기능을 가진 것이 Support 메서드이다. 예는 다음과 같다.

 

<%

   IF objRs.Support(Delete) Then
   objRs.Delete
   objRs("name") ="ananymous"
   objRs("tel")="000-000"
   objRs.Update

%>

 

 

출처 : 

ASP 쇼핑몰 제작 프로젝트따라하기

OWL 연구소 지음 

소스 : https://github.com/braverokmc79/asp-shoppingMall

 

 

 

 

 

 

 

about author

PHRASE

Level 60  라이트

그대가 자신의 불행을 생각하지 않게 되는 가장 좋은 방법은 일에 몰두하는 것이다. -베토벤

댓글 ( 0)

댓글 남기기

작성