login register Sysop! about ME  
qrcode
    최초 작성일 :    2001년 04월 07일
  최종 수정일 :    2001년 07월 19일
  작성자 :    taeyo
  편집자 :    Taeyo(김 태영)
  읽음수 :    137,093

강좌 목록으로 돌아가기

필자의 잡담~

신혼집도 어느정도 이제 모습이 꾸며지고 있어서 마음이 편해지네요...
사실. 제가 한 것은 하나도 없습니다... 와이프 될 친구에게 미안한 마음 뿐이네요.... 아아...

이번에 나오는 제 책에 대해 많은 분들이 관심을 가지시는 듯 하는데요...
이 강좌를 보실 즈음이면 책이 나왔겠네요.

분량이 900 페이지에 가까워 다 읽어보시기에는 부담스럽겠지만
구입 전 전체적인 구성은 꼭 살펴보시고 난 다음에 구입을 결정하시기를 바란답니다....
어떤 분들에게는 원하던 책일지 모르지만, 어떤 분들에게는 별로 일 수도 있으니깐요...

먼저, 저번 강좌에 올라온 몇몇 커멘트 질문에 대해서.. 가볍게 이야기를 하고 시작하도록 하겠습니다.
OLEDB.UDL 파일을 만들 경우에, 아무리 파일 이름을 바꾸어도 OLEDB.UDL.TXT로 되시는 분들 있죠?
그 분들은 탐색기에 가셔서 "도구" 메뉴의 "폴더 옵션"을 선택하도록 하세요..
그럼 다음과 같은 "폴더 옵션" 윈도우가 나오거든요...  그중에서 [보기] 탭을 선택하시구요
그림과 같이 "알려진 파일 형식의 확장면 숨김" 의 체크표시를 지우세요..
그리고, 다시금 파일의 확장자를 바꾸시면 잘 될 것이랍니다...  ^^

그리고, 오프라인에서 제가 이야기할 때 잘난체를 하는 듯한 모습을 느끼신 분이 있다고 하셨는데요...
저도 사람인지라.. 흥이 나면 잘난 체를 은연중에 하고는 하더군요...  겸손하지 못하게요..
집에 와서 후회하기는 하지만, 또 며칠 지나면 까먹고 또 그럴 때가 있는 편입니다...
많은 부분이 농담스러운 장난이었다고 생각하지만 그 부분을 기분나쁘게 생각하실 수도 있으실 것 같아요.. 
죄송하게 생각합니다...  앞으로는 좀 더 자중하도록 하겠습니다. 진짜로 반성중입니다.
그리고보니, 제가 요즘 조금 건방져진 것은 아닌가 하는 생각도 드네요...  변하고 있는 것일까요?
그래서는 안된다고 생각합니다...  노력하겠습니다. 부디 다시금 지켜봐 주세요....  진짜로요... 

그리고, 왜 이번 강좌에서 만들어 나가는 자료실에 사용할 파일 업로드 컴포넌트로 벤치마크 상에서 가장 높은 점수를 얻은 DEXT 업로드 컴포넌트가 아닌 ABCUpload를 사용하는가? 에 대한 이야기인데요.. 물론, 제 맘도 DEXT를 사용하고 싶습니다만.. 그것은 상용 컴포넌트입니다. 공부를 위해서 모두들 그것을 구입하실 수는 없지 않겠습니까? 물론, Trial 버전이 있기는 하지만, 요즘처럼 불법 소프트웨어 단속이 심한 때에는... 왠지 트라이얼 버전도 설치하기가 조금은 껄끄러운 것이 사실이지요... 해서 무료 컴포넌트인 ABCUpload를 사용하려 하는 것이랍니다. ^^

그리고, ABCUpload나 DEXT 나 사용방법이 비슷해서.. 둘중에 하나만 다루는 방법을 익히고나면 DEXT의 메뉴얼만 보아도 스스로 만들어 나가실 수 있을 것이라는 믿음도 있기 때문이지요. 해서, ABCUpload로 진행하려 하는 것이랍니다. 답변이 되었으면 좋겠네요...

그럼, 이제 이번 강좌에서 진짜로 이야기할 부분들을 시작해 보도록 하겠습니다. 바로.. 게시판의 글 쓰기 부분의 제작이지요.  게시판을 만들기 위해서 저의 경우는 언제나 글을 쓰는 폼을 먼저 만들고는 합니다. 뭐.. 별다른 이유가 있어서 그러는 것은 아니구요....  걍.. 오랜 습관이지요... 

글을 ASP 페이지에서 데이터베이스에 입력함에 있어서 말입니다. 기존에는 SQL 쿼리문을 사용해서 주로 넣었습니다만.. 이번에는 2 가지의 방식으로 넣도록 하겠습니다. 그 중에 여러분이 원하는 방식으로 글을 Insert 하시면 되겠구요. 제가 요즘들어 주로 쓰는 방법도 알려드리도록 하겠습니다.

자. 먼저 여러분이 만들어야 하는 것은 글을 입력하는 폼입니다. 저는 이번 폼은 다음과 같이 이쁘게 구성을 해 보았습니다. CSS 를 사용해서 모양도 조금은 이쁘게...  ^^  히히..

위의 폼은 제가 임의로 만들어 본 폼입니다만.. 여러분의 여러분의 디자인 감각에 맞추어서. 다른 모습으로라도 이쁘게만 만들어주시면 됩니다. 크게 문제가 될 것은 없지요..  (위의 폼은 그림입니다. 클릭해봐야 커서가 위치하지 않습니다. ^^) 단지, 컨트롤의 이름을 적절히 지정해 주는 것만 조심해 주시면 됩니다.

저의 경우는
제목을 입력받는 Input 컨트롤의 이름을 title 이라고 주었구요.
이름을 입력받는 Input 컨트롤의 이름을 name 이라고 주었습니다. 또한,
메일을 입력받는 Input 컨트롤의 이름을 mail 이라고 주었구요
사이트를 입력받는 Input 컨트롤의 이름을 url 이라고 주었구요
글 내용을 입력받는 Textarea의 이름은 memo 라고 설정해 보았습니다. 마지막으로
비밀번호를 입력받는 Input 의 이름은 pwd 라고 설정했습니다.

이것은 여러분도 맞추어 주세요....  다음 HTML은 위의 폼의 소스입니다. 스스로 폼을 만들기가 귀찮으신 분들을 이대로 긁어다가 html 을 만드시면 될 것입니다.  ^^

Write.htm

<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ks_c_5601-1987">
<title></title>
<style type="text/css">
  A {text-decoration: none; color:navy }
  A:hover {text-decoration: underline; color:orange}
  td {font-family:돋움;font-size:12 }
  input,Textarea {
    font-family:돋움;
    border: 1 solid white;
    border-bottom: 1 solid silver
  }
</style>
</head>
<script language="javascript">
<!--
function sendit()
{
  //제목
  if (document.myform.title.value == "") {
    alert("제목을 입력해 주십시오.");
    return;
}
  //이름
  if (document.myform.name.value == "") {
    alert("이름을 입력해 주십시오.");
    return;
}
  //글 내용
  if (document.myform.memo.value == "" ) {
    alert("글을 작성 안하셨습니다. 글을 작성해 주십시요");
    return;
  }
  document.myform.submit();
}
//-->
</script>

<body bgcolor="#ffffff" onload="javascript:document.all.title.focus();">
<form method="POST" action="Insert.asp" name="myform">
  <table border="0" cellspacing="0" width="520" cellpadding="0">
    <tr height="50">
      <td align="right" width="170" >
        <input type="button" value="글 저장" name="write" OnClick="sendit()"
          style="background-color:khaki"></td>
        <td width="350" align="left" style="padding-left:70">
          <font color="blue">글을 남겨주세요...</font></td>
    </tr>
    <tr height="30" >
      <td width="170" align="right" >제목</td>
      <td width="350" align="left" style="padding-left: 20; padding-right: 30">
        <input type="text" name="title" size="50"></td>
    </tr>
    <tr>
      <td align="right" >이름</td>
      <td align="left" style="padding-left: 20; padding-right: 30">
        <input type="text" name="name" size="50"></td>
    </tr>
    <tr>
      <td align="right" >메일</td>
      <td align="left" style="padding-left: 20; padding-right: 30">
        <input type="text" name="mail" size="50"></td>
    </tr>
    <tr>
      <td align="right" >사이트</td>
      <td align="left" style="padding-left: 20; padding-right: 30">
        <input type="text" name="url" size="50"></td>
    </tr>
    <tr>
      <td align="right" >글</td>
      <td align="left" style="padding-left: 20; padding-top: 5; padding-bottom: 5">
        <textarea wrap="hard" rows="10" name="memo" cols="50"></textarea></td>
    </tr>
    <tr height="25">
      <td align="right" colspan="2" style="padding-right:25">비밀번호
        <input type="password" name="pwd" size="7">
        <input type="button" value="글 저장" name="write" OnClick="sendit()"
          style="background-color:khaki">
      </td>
    </tr>
  </table>
</form>
</body>
</html>

자.. 여기까지 준비가 다 되셨습니까??? 그렇담, 이제 ASP 페이지를 한번 만들어 보겠습니다. 여러분 스스로 ASP 페이지를 만들어 보실 수도 있겠습니다만... 이번에 제가 보여드릴 페이지는 ASP 튜닝도 되어져 있는 나름대로는 최적화되어져 있는 소스입니다. 제가 2001 년에 추천하는 소스이지요....  ^^  어쩌면 조금은 어려울 수도 있겠네요..   자.. 그 소스를 공개합니다.  짜잔...~~~~

Insert.asp

<%
Option Explicit

Dim name, mail, title, url, memo, pwd
name = Request.form("name")
mail = Request.form("mail")
title = Request.form("title")
url = Request.form("url")
memo = Request.form("memo")
pwd = Request.form("pwd")

Response.Write "이름은 " & name & "<br>"
Response.Write "메일주소는 " & mail & "<br>"
Response.Write "제목은 " & title & "<br>"
Response.Write "사이트는 " & url & "<br>"
Response.Write "글 내용은 " & memo & " <br>"
Response.Write "암호는 " & pwd & "<br>"
%>

무~~~~어???  무어가 이리 썰렁한 거야? 라고 놀라시는 분들이 있을 것입니다. 하지만, 이 부분은 결코 썰렁한 부분이 아닙니다. 데이터베이스와의 연동을 함에 있어서 무엇보다 중요한 것은

폼에서 넘어온 값들이 제대로 넘어왔는지 꼭 확인해 보고 넘어가는 것입니다.

이것은 그 어떤 것보다도 중요합니다. 먼저, 각각의 폼에서 넘어온 값들을... 지역변수를 만들어서 거기에 저장한 다음 그들이 제대로 값이 있는지 찍어보세요.. 이것은 정말로 무척이나 중요합니다.

그리고, 페이지의 상단에는 반드시 Option Explicit 를 사용하도록 하세요... 이 옵션을 지정하게 되면, 이제 ASP 페이지에서는 모든 변수는 반드시 Dim 으로 선언하고 사용해야 합니다만,  그래서 조금은 불편하다고 느끼실 수도 있으시겠습니다만.. 이렇게 변수를 선언하고 사용하면 페이지의 처리속도 증가효과가 있구요.. 변수의 조잡한 사용으로 인한 버그들을 미연에 방지하는 효과를 제공해 줍니다... 이것의 필요성을 피부로 느끼는 것은 사실 길고, 많은 코딩을 통해서 얻어지는 것이라  어쩌면 여러분은 이러한 옵션의 사용을 불필요, 불편하다고 느낄 수도 있습니다.

하지만, 태오의 말을 믿어주세요.. 이러한 옵션을 사용하는 습관은 여러분을 고급 프로그래머로 만들어 줄 겁니다. 모든 ASP 페이지에서는 반드시 사용하도록 하세요.. 반드시요..  ^^

그리고, Request 로 받아온 모든 컬렉션의 값들은 반드시 사용하시기 전에... 지역변수(페이지 레벨)에 담아서 사용하도록 하세요. 위의 소스가 그렇게 작성되어 있지요. 이 방법 또한 ASP 페이지의 퍼포먼스를 높이는 방법중에 하나입니다. 이 외에도 많은 퍼포먼스 향상의 팁이 있는데요... 그것은 MSDN의 다음 기사를 참고하도록 하세요

http://msdn.microsoft.com/workshop/server/asp/asptips.asp#asptips_tip1

자... 위의 소스의 결과로 인해 여러분들이 폼에 작성한 모든 데이터들이 잘 넘어온 것을 확인하셨다면.. 그렇다면, 이제 소스를 제대로 구성할 시간이 온 것입니다. 이제 Insert.asp 페이지의 완전한 저의 추천 소스를 보여드리도록 하겠습니다.

Insert.asp

<!--METADATA TYPE="typelib" NAME="ADODB Type Library"
FILE="C:\Program Files\Common Files\SYSTEM\ADO\msado15.dll" -->
<%
Option Explicit

Dim name, mail, title, url, memo, pwd
name = Request.form("name")
mail = Request.form("mail")
title = Request.form("title")
url = Request.form("url")
memo = Request.form("memo")
pwd = Request.form("pwd")

Dim strConnect
strConnect="Provider=SQLOLEDB;Data Source=(local);Initial Catalog=MyDatabase;"&_
    "user ID=sa;password=xxxx;"
'만일, Access를 사용하신다면 위의 한줄을 다음처럼 바꾸시면 됩니다.
'strConnect="Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\Study\MyDataBase.mdb"


Dim adoRs
Set adoRs = Server.CreateObject("ADODB.RecordSet")
adoRs.Open "MyBoard", strConnect, adOpenStatic, adLockPessimistic, adCmdTable

with adoRs
  .AddNew
  .Fields("b_name") = name
  .Fields("b_email") = mail
  .Fields("b_title") = title
  .Fields("b_url") = url
  .Fields("b_pwd") = pwd
  .Fields("b_readnum") = 0
  .Fields("b_date") = now()
  .Fields("b_ipaddr") = Request.ServerVariables("REMOTE_ADDR")
  .Fields("b_content") = memo

  .Update
  .Close
end with

Set adoRs = nothing
%>

소스를 보고 나신 뒤의 소감은 어떠하신가요?

1. 소스가 참 깔끔하구만~~
2. 소스가 깔끔하게 보이기는 하나 그 내용이 조금은 난해해 보이는구만~~~
3. 워따메.. 이게 뭔 코드다냐~~~

설마 이런 반응들은 아니시겠죠?

사실 Taeyo's ASP나 기존의 초급 ASP 책을 떼신 분들중에는 ADO에 대해서 깊게 공부하신 분들이 적기에 이 부분의 소스가 조금은 어려워 보일 수도 있습니다. 하지만, ADO에 어느정도 친숙하신 분에게는 너무나도 쉬운 소스이기도 하지요. 그렇다면 이제 소스를 하나씩 같이 익혀나가 보도록하겠습니다.

가장 먼저 등장하는 소스는 ADO 관련 타입 라이브러리의 지정이네요..

<!--METADATA TYPE="typelib"  NAME="ADODB Type Library"
      FILE="C:\Program Files\Common Files\SYSTEM\ADO\msado15.dll"-->

ADO의 타입 라이브러리의 역할에 대해서 난 잘 모르겠다 하시는 분은... 지금 코를 한번 만져보세요...  흠....
꽤 많은 분이 계시는 군요... 흠흠.... 하지만, 이 자리에서 다시금 타입 라이브러리를 설명 드리기가 뭐해요... 왜냐구요??? 이미 강좌로 있는 내용이거든요,...  다음 링크를 눌러보세요.

그럼 Adovbs.inc 와 타입 라이브러리에 대해서 자세한 설명이 나올 것입니다.  그게 무엇이고, 왜 그것이 필요한지 말이지요  ^^

ActiveX Data Object - ADO 타입 라이브러리 (http://taeyo.pe.kr/Lecture/_ADO/typelib.htm)

작년 2000 년 6월에 이미 올려놓은 강좌입니다만.. 조금 내용이 빈약한 편이기는 합니다. 하지만, 타입 라이브러리의 역할을 이해하시기에는 충분하리라 생각됩니다....

어쨋든, 우리는 타입 라이브러리를 설정함으로 해서 현재의 ASP 페이지내에서... ADO 관련 상수들을 마구 가져다가 사용할 수 있게 되었습니다.  ^^  위의 소스중에서라면 커서타입과 락타입을 지정하는 adOpenStatic, adLockPessimistic 등이 그것이겠죠? 그리고, 만일, 이 타입 라이브러리의 설정을 Global.asa 에서 해주게 된다면, 그때는 사이트내의 즉, 웹 어플리케이션내의 모든 ASP 페이지에서 ADO 상수들을 사용할 수 있게 되므로... 이 설정을 Global.asa 에 해주는 것도 좋은 방법이라 볼 수 있겠습니다.

그 다음의 코드는 Option Explicit를 지정하고, 각각의 넘어온 Request 컬렉션의 값들을... 페이지레벨의 변수에 담는 부분입니다. 반드시 해주어야 하는 부분이지요. 귀찮다고 생각하심 안됩니다.

Option Explicit

Dim name, mail, title, url, memo, pwd
name = Request.form("name")
mail = Request.form("mail")
title = Request.form("title")
url = Request.form("url")
memo = Request.form("memo")
pwd =  Request.form("pwd")

그 다음은 이제 데이터베이스와 연결할 OLE DB 연결 문자열을 만들고 있습니다. OLE DB 연결 문자열을 사용하면 ODBC 처럼 세팅을 할 필요는 없어집니다. 단지, 이 연결 문자열만 가지고서 데이터베이스 커넥션이 가능하게 되지요....

Dim StrConnect
strConnect="Provider=SQLOLEDB;Data Source=(local);Initial Catalog=MyDatabase;"&_
                    "userID=sa;password=xxxx;"

저의 경우는 데이터베이스로의 연결 계정으로 sa를 사용했습니다만 가급적 어드민 계정인 sa는 사용하지 않는 것이 좋다는 것을 다시금 말씀드리고 싶습니다. 해서, user ID와 Password 부분은 여러분이 적절히 바꾸어 주시는 것이 좋을 것이라 생각합니다.

그 다음 부분의 코드는 레코드셋 객체를 만드는 부분인데요.. 사실상 데이터베이스와의 커넥션을 위해서는 Connection 개체가 필요하기는 합니다. 하지만, 반드시 있어야 하는 것은 아니지요... 단지, 데이터베이스와의 연결이라면 그것은 RecordSet 개체로도 할 수가 있습니다.  다음 코드가 바로 그것이지요...

Dim adoRs
Set adoRs = Server.CreateObject("ADODB.RecordSet")
adoRs.Open "MyBoard", strConnect, adOpenStatic, adLockPessimistic, adCmdTable

이 부분의 코드를 ASP를 하시면서 첨 본다!!  하시는 분이 있죠?  분명히 있을 것입니다. 그렇다면, 그 분은 다음 강좌를 꼭 보셔야만 합니다.

ActiveX Data Object - RecordSet 개체의 AddNew,Update, Delete

그 강좌를 모두 보고 나시면.. 여러분은  ^^

adoRs.Open "MyBoard", strConnect, adOpenStatic, adLockPessimistic, adCmdTable

라는 코드가 의미하는 바를 자세히 이해할 수 있을 것입니다...  ^^ 해서, 그 강좌를 보시면 아시겠지만.... 위의 소스는 지정된 strConnect(OLE DB 연결 문자열)을 통해서 내부적으로 Connection 개체를 만들고 그 해당 데이터베이스의 "MyBoard"라는 테이블로 접근해서....(Open 메소드의 1,2 번째 인자) 그 테이블의 모든 데이터를 레코드셋 개체로 여는데, 열 때 수정, 저장이 가능한 상태로 (커서타입과 락타입을 지정하여서 말입니다) 오픈한다는 것이지요...(Open 메소드의 3,4 번째 인자)

그리고, 이렇게 오픈한 다음에는 RecordSet의 Addnew 메소드를 사용해서 새로운 레코드를 추가할 수도 있게 됩니다..  ^^  하나의 레코드는 여러개의 컬럼으로 이루어져 있기에.. 다음 코드처럼 각각의 필드에 데이터를 넣어준 뒤, Update를 하는 것이지요..

with  adoRs
        .AddNew
        .Fields("b_name") = name
        .Fields("b_email") = mail
        .Fields("b_title") = title
        .Fields("b_url") = url
        .Fields("b_pwd") = pwd
        .Fields("b_readnum") = 0
        .Fields("b_date") = now()
        .Fields("b_ipaddr") = Request.ServerVariables("REMOTE_ADDR")
        .Fields("b_content") = memo
 
       .Update
       .Close
end  with

With문은 VBScript 5 에서부터 지원되는 기능이구요.. VB에서는 이전부터 지원되는 것이었습니다. 개체의 이름을 반복해서 사용할 일이 많은 경우 with 문을 사용하여 그 with 구역 안에서는... 개체의 이름을 생략하고 사용할 수가 있게되는 것이지요...

사실상 위의 코드중에서도 .Fields("b_readnum") = 0 와  .Fields("b_date") = now()  부분은 생략해도 무관한 코드이기는 합니다. 만일, SQL 서버의 MyBoard  테이블에서 이 컬럼들에게 Default 값을 지정했다면 말이지요... ^^

그리고 사실, 이제서야 고백하면 첫번째 강좌에서 우리가 같이 만든 테이블 구조에선 빠져있는 부분이 있었습니다. 컬럼 하나를 미처 덜 만들고 지나갔던 것이지요.. 지금 다시 첫번째 강좌를 보시면 아시겠지만.. 그림이나, Create Table 쿼리가 조금 바뀌어져 있을 것입니다. b_pwd 라는 컬럼이 추가되어져 있지요... 네.. 그렇습니다. 슬그머니 바꾸었습니다...히히....

이미 제가 첫번째 강좌를 고친다음에(아마도 2001년 4월 이후)현재 이 부분을 보시는 분들은 걱정하실 것이 없을 겁니다. 그분들은 제대로 만드셨을 테니까요...  ^^  (수정일이 4월 1일이거든요) 이미 슬그머니 바꾸어져 있습니다....  김태영 7단... 네~~  슬그머니 바꾸었죠? 네? 그러씀니다. 어쨋든 여러분도 현재 MyBoard 테이블에 b_pwd 컬럼을 추가해 주세요... 저의 불찰을 부디 용서하시면서 말이지요...  ^^

자... 그래서 이제 모든 데이터는 Rs.Update 메소드로 인해서 서버에 반영되게 되구요.  update 메소드를 호출하는 그 시점이 실제로 데이터가 데이터베이스로 들어가는 시점이기도 합니다. 그렇게 처리가 완료되었다면 다 사용한 Rs은 반드시 close 를 해주시는 것을 잊지 마시구요

Set adoRs = nothing 해주시는 것도 잊으시면 안됩니다.  ^^

이 방법의 이름은 RecordSet의 Addnew 메소드를 통한 데이터의 저장방법이구요...이 방법을 조금 더 간단하게 한다면 다음과 같이 코드를 바꿀 수도 있습니다.

Addnew(& Array)를 통한 Insert.asp

<!--METADATA TYPE= "typelib"  FILE="C:\Program Files\Common Files\SYSTEM\ADO\msado15.dll" -->
<%
Option Explicit

Dim name, mail, title, url, memo, pwd
name = Request.form("name")
mail = Request.form("mail")
title = Request.form("title")
url = Request.form("url")
memo = Request.form("memo")
pwd = Request.form("pwd")

Dim strConnect
strConnect="Provider=SQLOLEDB;Data Source=(local);Initial Catalog=MyDatabase;" & _
    "user ID=sa;password=xxxx;"
'만일, Access를 사용하신다면 위의 한줄을 다음처럼 바꾸시면 됩니다.
'strConnect="Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\Study\MyDataBase.mdb"


Dim adoRs
Set adoRs = Server.CreateObject("ADODB.RecordSet")
adoRs.Open "MyBoard", strConnect, adOpenStatic, adLockPessimistic, adCmdTable

Dim cols, vals
cols=Array("b_name","b_email","b_title","b_url","b_pwd","b_readnum","b_date","b_ipaddr","b_content")
vals=Array(name, mail, title, url, pwd, 0, now(), Request.ServerVariables("REMOTE_ADDR"), memo)

with adoRs
  .AddNew cols, vals


  .Update
  .Close
end with

Set adoRs = nothing
%>

이 방법은 Addnew 메소드를 사용한다는 것은 이전 것과 일치하지만, 이번에는 각각의 컬럼값들을 입력함에 있어서 배열을 사용한 방법입니다. 두개의 배열이 필요하구요..  cols 라는 배열에는 데이터를 입력할 컬럼들을 모두 기입해 주어야 합니다. 그리고, 그에 해당하는 값을 넣을 배열이 필요한데요 이것은 cols 란 배열에 설정한 컬럼순서에 맞게 맞추어서 데이터를 넣어주어야 합니다.

어느 것이 더 편한지는 여러분이 선택할 사항이구요... 두 방법은 거의 처리 속도가 비슷하니 둘중에는 맘에 드는 것을 골라서 사용하시면 됩니다.  ^^

어때요? 여러분은 이번 강좌를 이해하기 위해서 연관된 여러 강좌를 살펴보아야 했었겠지만... (아직 안 보신분은 꼭 보고 지나가시기 바랍니다.. ^^ 반드시요..) 지나고 보니 무척이나 유용한 내용들이었을 것입니다. 이에 대한 더욱 자세한 이야기 즉, RecordSet을 다루는 좀 더 심도있는 이야기들은 책을 참고보심도 좋을듯 합니다. 하지만, 이 방법보다는 아마도 여러분은 SQL 쿼리문자열을 만들어서 사용하는 방법에.. 더 친숙하실 수도 있습니다. 물론, 그 방법도 나쁘지는 않지요...  (기존 책에서는 주로 이 방법을 사용했지요?)

만일, 위의 소스를 SQL 쿼리문장을 사용하는 방법으로 바꾼다면 어떻게 될까요? 궁금하세요? 바로 다음과 같이 되어야 할 것이랍니다.

SQL 쿼리문자열을 사용한 Insert.asp

<%
Option Explicit

Dim name, mail, title, url, memo, pwd
name = Request.form("name")
mail = Request.form("mail")
title = Request.form("title")
url = Request.form("url")
memo = Request.form("memo")
pwd = Request.form("pwd")

Dim strConnect
strConnect="Provider=SQLOLEDB;Data Source=(local);Initial Catalog= MyDatabase;"&_
    "userID=sa;password=xxxx;"
'만일, Access를 사용하신다면 위의 한줄을 다음처럼 바꾸시면 됩니다.
'strConnect="Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\Study\MyDataBase.mdb"


Dim adoCn
Set adoCn = Server.CreateObject("ADODB.Connection")
adoCn.Open strConnect

Dim SQL
SQL = " Insert into MyBoard "
SQL = SQL & " (b_name,b_email,b_title,b_url,b_pwd,b_readnum,b_date,b_ipaddr,b_content) "
SQL = SQL & " values "
SQL = SQL & " ('" & name & "',"
SQL = SQL & "'" & mail & "',"
SQL = SQL & "'" & title & "',"
SQL = SQL & "'" & url & "',"
SQL = SQL & "'" & pwd & "',"
SQL = SQL & " 0, getdate(),"
SQL = SQL & "'" & Request.ServerVariables("REMOTE_ADDR") & "',"
SQL = SQL & "'" & memo & "')"

adoCn.Execute SQL

adoCn.close
Set adoCn = nothing
%>

이러한 방법은 이미 여러분들이 알고 있었던 방법일 것입니다. 쿼리문자열을 만드는 것이 상당히 피곤한 방법이었지요.... 또한, 이 방법은 쿼리중에 어떤 문제가 있을 경우 언제나 에러가 나는 라인은... adoCn.Execute SQL 입니다.  SQL 문자열을 편집하는 그 위의 코드들은 단지 문자열의 결합일 뿐이구요.. 실제 이 쿼리가 실행되는 시점이 바로  adoCn.Execute SQL 이니까요...

그러다보니 쿼리에 이상이 있으면 에러가 나지만, 그 에러가 나는 라인이라는 것이 언제나 adoCn.Execute SQL 였던 것입니다. 이 때문에 이 방법은 디버깅을 하기가 참으로 난감했지요.. 그러나, 이러한 방법을 우리는 오랫동안 써왔습니다. 이유가 무엇일까요?

그것은 이 방법이 가장 수행속도가 빠르다는 데에 있었습니다.

이전 방법인 RecordSet 의 AddNew 메소드를 사용하는 방법은 각각의 컬럼마다 데이터를 넣기에 에러가 날 경우 그 에러라인이 명확하게 나타나 주는 편입니다. 고로, 어떤 컬럼에 데이터를 넣을 경우 에러가 발생하는 것인지 디버그 하기가 쉬운 편이었지요. 하지만, 그 방법은 쿼리문자열을 이용하는 지금의 방법에 비해 속도가 느리다는 단점이 있습니다. 하지만, 소스의 가독성이 높으며, 에러발생시 디버그하기가 쉽다는 장점이 있었지요...

해서, 여러분은 이 두방법을 모두 사용할 수 있습니다만.... 상황에 따라서 적절히 맘에 드는 방법을 선택해서 사용하실 수 있습니다. 저는 간단한 쿼리문장일 경우는 SQL 쿼리문자열을 사용하는 방법(Connection개체의 Execute)을, 그리고, 많은 컬럼에 데이터를 넣어야 하는 경우는 RecordSet의 Addnew 를 통한 저장방법을 사용하는 편이지요...

이것은 반드시 이렇게 해야만 한다는 것이 아니구요... 상황에 따라 개발자가 선택해서 사용해야하는 부분인 것입니다.  ^^  선택은 여러분의 몫입니다. 언제나 그렇지만 말이죠...  ^^ 자.. 이렇게 만들어진(위의 세 소스중에 어떤 것을 사용하시던지 말입니다.) 소스를 가지고 데이터를 Insert 할 경우의 테스트 화면입니다.

저는 다음 그림과 같이 폼을 채워넣었구요..  그 결과 데이터베이스에는 그 아래의 그림처럼 데이터가 잘 들어가 있는 것을 확인할 수 있었습니다. 물론, 브라우저는 썰렁한 하얀 화면을 보여줄 것입니다만... 지금 중요한 것은 데이터가 들어갔느냐는 것이니...  ^^   그 부분에 중점을 둬서 테스트하시기 바란답니다...  ^^

아래의 그림은 위의 소스가 실행되어져서..  데이터가 데이터베이스측에 입력되어져 있는 모습이랍니다.

..  해서 이것으로 이번 강좌에서 이야기하고 싶었던 부분은 대충 이야기가 된 것 같습니다. 아무래도 강좌이다 보니 아주 구체적으로 자세한 이야기까지는 꺼내기가 어려워지네요... 구체적으로 들어가게 되면 너무 많은 주변이야기들과 개념이야기들로... 게시판과는 무관할 수 있는... 여러가지 다른 이야기들도 풀어야 하기 때문이지요... (진짜루 제가 게으르기 때문은 아닙니다 T.T)

이 부분에 대해서는 (아마도 주로 ADO에 관한 이야기들이겠지만.....) 이번에 나오는 제 책이나... 기존에 존재하는 ADO 관련 서적들을 참고해 보세요.. 이제의 여러분에게는 ADO에 관한 능통한 지식이 분명 간절히 요구될 것입니다. 어떻게 ADO 개체들을 사용하느냐에 따라 ASP 페이지의 퍼포먼스 차이가 생기니까요...  ^^

너무 장황하게 쓰다보니...  이번 강좌를 쓰면서 이야기하고자 했던 부분들 중에.. 조금은 빠진 부분이 없지 않아 있는 것도 같습니다...  만일, 질문이 있으시다면 그 부분은 ASP 게시판을 이용해 주시기 바라구요...  ^^ 질문시 제목의 앞에 [강좌관련] 이라고 해서 질문하시면...  저도 최대한 답변에 참여하겠습니다.


authored by


 
 
.NET과 Java 동영상 기반의 교육사이트

로딩 중입니다...

서버 프레임워크 지원 : NeoDEEX
based on ASP.NET 3.5
Creative Commons License
{5}
{2} 읽음   :{3} ({4})