드뎌고대하시고기대하시던실질적인StaticSQLCode입니다.

지금옆에서팀장님들이열씨미회의를하고계신데전눈치를보면서열씨미글을쓰고있습니다.

아마도들키면전모모팀장님한테무지맞을듯...

앗전팀장님20일소집해제추카드려요...
(팀장님들이병특이시거든요..)

더불어송팀장님내년3월소집해제미리추카드려요..

3.실질적인StaticSQL에대해

StaticSQL을쓰기위해서는ADODB의Command객체를사용해야합니다.

갑자기깜찍이님의StoredProcedure강좌가생각이나는군요..

CREATETABLEemployee
(
empnovarchar2(4)primarykey,
empnamevarchar2(20)notnull,
empaddrvarchar2(200)notnull,
empcphonevarchar2(11),
empstatusvarchar2(1)
);

강좌1에서사용하던employee테이블이죠..
(잊어버리셨을까해서다시보여드립니다.
저착하죠..^.^)

<%OptionExplicit%>

<!--#includevirtual="/include/adovbs.inc"-->

<%
DimConObj,DbCmd,InsSql

"(1)
SetConObj=Server.CreateObject("ADODB.Connection")
ConObj.Open"test","scott","tiger"

"(2)
SetDbCmd=Server.CreateObject("ADODB.Command")
SetDbCmd.ActiveConnection=ConObj

"(3)
InsSql="INSERTINTOemployee(empno,empname,empaddr,empcphone,empstatus)"&_
"VALUES(?,?,?,?,?)"

"(4)
withDbCmd
.CommandText=InsSql
.CommandType=adCmdText

"(5)
.Parameters.Append.CreateParameter("@empno",adVarChar,adParamInput,4)
.Parameters.Append.CreateParameter("@empname",adVarChar,adParamInput,20)
.Parameters.Append.CreateParameter("@empaddr",adVarChar,adParamInput,200)
.Parameters.Append.CreateParameter("@empcphone",adVarChar,adParamInput,11)
.Parameters.Append.CreateParameter("@empstatus",adVarChar,adParamInput,1)

"(6)
.Parameters("@empno")="0001"
.Parameters("@empname")="김영준"
.Parameters("@empaddr")="부산시서구남부민동"
.Parameters("@empcphone")="01101011010"
.Parameters("@empstatus")="1"

"(7)
.Execute
Endwith

"(8)
SetDbCmd=Nothing
SetConObj=Nothing
%>


자위의예제소스를보고는어떤느낌이드시나요..

아니이놈이뭐가있는것처럼뻥만치더니알고보니아무것도아니잖아.

뭐그렇게생각하셔도할수없습니당.-_-;;;

자그럼순서대로설명을해볼까요.

아참먼저간단한팁하나와StaticSQL을꼭해주어야할것들을대해서설명하겠습니다.

팁:OptionExplicit를꼭사용하세요.
메모리관리에도좋구변수사용시짱입니다요.

StaticSQL사용하기전에먼저adovbs.inc파일을꼭include해주셔야합니다.

(왜냐구요,Command객체에서사용되는상수들이adovbs.inc파일안에모두들어가있기때문에

꼭필요합니다.)

(1)은당근DB에컨넥션을맺는것이죠..
(먼저ODBC를잊지말고세팅해주어야겠죠..)

(2)는Command객체를생성해야겠죠..
(왜냐구요..StaticSQL은Command객체를사용해서만이지원이가능하거든요..)

(3)변수선언해서여기다가StaticSQL을변수에다저장해줍니다.
여기서중요한것은BindingParameter인데눈치채셨겠지만당연히"?"입니다.
실망하셨다구요.어쩔수없죠.히(@_@);;;;

(4)그런다음WithDbCmd라는것을쓰는데이것은WithDbCmd와EndWith내에서는
DbCmd의property들을사용하는거죠..
CommandText는말그래도명령문장인데여기다가위에서변수에다저장한SQL을넣어주죠..
(참고).CommandText="INSERTINTOemployee(empno,empname,empaddr,empcphone,empstatus)"&_
"VALUES(?,?,?,?,?)"

위와같은방식으로(3)부분을생략하고바로SQL을적어줄수도있습니다.

CommandType이있는데요.
깜찍이님강좌보신분들은아실텐데요.
이부분에다가adCmdStoredProc를쓰면스토어드프로시져쓸수있다는것아시죠.
(다들공부를열씨미하시니까다아실꺼에요.)
저처럼adCmdText를사용하시면그냥SQL을사용하실수있습니다.
예를들자면

withDbCmd
.CommandText="INSERTINTOemployee(empno,empname,empaddr,empcphone,empstatus)"
&_
"VALUES("0001","곰탱이","서울시서초구양재동","0111010101","1")"
.CommandType=adCmdText
.Execute
EndWith

굳이StaticSQL을쓰지않으신다면위와같이Command객체를사용해서Query를실행시키시지마시
길...
(왜냐하면소스만쓸데없이길어지니까요..)

(5)BindingParameter들의변수타입과사이즈를정해주는부분입니다.
일반적인SQL을실행시키는것보다는asp소스가길어지죠..
그러나성능향상을위해서소스몇줄이길어지는것은감수를해야죠.

눈치가빠르신분들은이미눈치채셨겠지만요..

@empno라고해놓은것을볼수있습니다.DB테이블의empno컬럼이위치할자리에들어갈

BindingParameter라는것을알리는것이죠.

이런걱정을하시는분들이있겠죠.

만약똑같은이름의변수를써야하면어떻게하냐고
(예)SELECTempname
FROMemployee
WHEREempno=?
ANDempno=?

위와같은경우에는바인딩파라미터를어떻게설정해야할까요?

저의입사동기인창현씨가정답을알아냈습니다.(사실제가입사일짜는며칠이빠릅니당.무하하)

Fori=0To1
.Parameters.Append.CreateParameter("empname"&CStr(i),adVarChar,adParamInput,20)
Next

위와같이골뱅이를빼버리면대입해주는파라미터순서대로바인딩파라미터가세팅이됩니다.

앗3편까지쓰는데4시간이걸리는군요..
(휴힘들군요..시원한아이스크림이라도먹었으면)


(6)(5)에서바인팅파라미터을세팅했다면그에대한값들을넣어주어야겠죠.

(5)번에서예로들었던StaticSQL에대해서바인딩파라미터값넣어주는방법입니다.
Fori=0To1
.Parameters("empname"&CStr(i))=CStr(emp(i))
Next

(주의)"@"을사용하지않고바인팅파라미터세팅을해줄때는순서가무척중요합니다.
주의하시길...

(7)그런다음.Execute로실행을해주시면됩니다.

그런데만약우리가사용하고자하는SQL이Select문이었다면어떻게될까요?

그럼어떻게해서값을가져와야될까요?

만약SELECT문을StaticSQL로쓰는경우

.Execute문을밖으로빼어냅니다.

그런다음SetObjRecSet=DbCmd.Execute라고설정하면SELECT문에서

반환된SQL문의결과값이ObjRecSet으로저장되겠죠..

그런다음지지고(?)볶으면되겠죠..

(8)아힘드셨죠.

마지막SetDbCmd=Nothing입니다.

이놈의Command객체가재사용이불가능하다는것을알았습니다.

StaticSQL을하나쓰고나서는Nothing해주고나서다시(1)에서(9)까지의

과정을다시거치셔야합니다.

이과정이약간번거로워서그렇지DB쪽에걸리는부하는현저히

줄어들게됩니다.
(큰사이트일경우더욱더빛을발하겠죠..)

아모두들제글을읽어주신다고수고하셨습니다.

다음시간이마지막이되겠군요..

다음시간도중요한얘기를할테니꼭읽어보시고데브칩을쿨럭~~~~~

(여담)
아이스크림소년이야기.

때는1950년어느시골장터

어느더운여름날

아이스크림통을맨소년이손을호호불어가면아이스크림을팔고있다.

"아저씨아이스크림사세요."

"아줌마맛있는아이스크림사세요."

"언니맛있는아이스크림동생한테사주세요."

태양은사정없이내리째고아이스크림소년은지쳐서털썩쓰러진다.

"아시원한아이스크림먹고싶어."

이소년은고민하다가아이스크림통에서아이스크림을꺼내먹는다.

"아시원해."

어느새저녁이오고그의손엔비어버린아이스크림통과아이스크림껍질만이남아있다.

그리고다음날아침

신문에는어느더운날아이스크림통을맨소년이감기로병사했다는소식이....1

쿨럭~~~~~

성냥팔이소녀패러디입니당.죄송퍽0_-;;;

다음강좌에서뵈요..


참고자료출처
1.En-CoreWeb사이트
StaticSQL사용예제(VB에서ADO사용)작성자:김성준


참고서적
1.Wrox사의BegginingASP3.0과ProfessionalASP3.0
2.대용량데이터베이스
3.클릭하세요오라클8i
4.OCP8오라클사정식교재..
5.기타저의OCP지식들...(무하하무늬만OCP라네요..)


p.s."아저씨데브칩이뭐야?"

퍽...

근데데브칩의용도가뭐죠?@_@

틀린내용에대해서는가차없이꾸짖어주십시오.

poo97@nownuri.net으로메일을보내주십시오.

이글을퍼가실때는저에게연락을주시길...
(모든저작권은곰탱이에게귀속되어있습니다.쿨럭~~~~~)
Posted by 퓨전마법사
,