Stored Procedure(저장 프로시져) 코딩을 쉽게 하자

Written by Ssemi™(semin Seol), www.Ssemi.net

귀차니즘에 빠진 Ssemi™의 Library 제 3탄 - SP_CodingMaker를 소개합니다.

제가 쓰는 에디터 프로그램은 EditPlus입니다.
그러다 보니 모두 하드코딩(Hard Coding)을 하게 되는데요

ASP작업시에 Command 개체를 통해서 Stored Procedure를 사용하는 코드를 작성할 때, Parameter 값을 입력하게 됩니다.
With oCmd
   .ActiveConnection = strConnect
   .CommandType = 4
   .CommandText = "sp_Login"
   .Parameters.Append .CreateParameter("@UserID", 200, &H0001, 16, UserID)
   .Parameters.Append .CreateParameter("@Password", 200, &H0001, 20, Password)
   .Parameters.Append .CreateParameter("@OutError", 3, &H0002, 0)
   .Execute, , 128
   OutError = .Parameters("@OutError").Value
   IF isNull(OutError) OR Len(OutError) = 0 Then OutError = 0 ELSE OutError = CLng(OutError) End IF
   SET oRs = .Execute
   .Parameters.Delete "@UserID"
   .Parameters.Delete "@Password"
   .Parameters.Delete "@OutError"
End With

이부분은 거의 뭐 직접 작성하기 보단, Ctrl + C (복사하기) 와 Ctrl + V (붙이기)로 작성을 해나가는데요.
이게 나름대로 귀찮은 작업니다. 이걸 간편히 하고자 부분 수정만 하면 편하게 사용할 수 있게 하나 만들어 놓았었습니다.
나름대로 지저분하게 만들어 놓았던 것을 약간 스타일링(!) 하고, 코드 좀 수정(!)해서 배포합니다.


Store Procedure Coding Maker

귀차니즘의 ASPer에게 이것이 아주 도움이 되기를 희망하면서..... ^_^

▶ 다운로드(Download)


▶ 사용법

파일을 열어보시면 아래와 같은 부분이 있습니다. 해당 정보를 입력해주세요.

'-----------------------------------------------------------
'    // 디비 연결
'-----------------------------------------------------------
Dim DBSrv, DBName, DBID, DBPW
DBSrv = ""
DBName = ""
DBID = ""
DBPW = ""
'-----------------------------------------------------------
'    // 객체 이름 지정
'-----------------------------------------------------------
Dim RecordSetObjectName, CommandObjectName
RecordSetObjectName = "oRs"
CommandObjectName = "oCmd"
'-----------------------------------------------------------

후에 ASP를 실행하시면 아래와 같은 결과창이 뜨게 됩니다.
파일을 실행한 화면입니다

파일 실행한 화면

제일 아래는 DBHelper Class를 사용하는 사용자(?)를 위해 특별히(..) - 저도 요즘 써보고 있거든요;;;;

▶ 주의사항

@RETURN_VALUE를 안쓴다는 가정하에 진행된 스크립트 파일입니다.
파일안에서 @RETURN_VALUE에 대한 내용을 아예 삭제시켰거든요 ^_^;
MSSQL2000에서는 @RETURN_VALUE가 제대로 안먹어서 @변수 하나 만들어서 OUTPUT으로 빼서 사용하는편이 훨씬 좋아서요!

데이터타입을 Decimal 혹은 Numeric 값을 쓸 경우 Precision 과 NumericScale 을 정의해야 하는데,
이 부분을 제가 사용한 적이 없어서 코드에 넣어두지 않았습니다.


앞으로 업데이트 할 예정이니 ^_^ 일단은 사용해주시기 바랍니다.

Enjoy Your Coding!
2006. 7. 22. 11:03

프로시져를 사용하여 자바스크립트 에러 메시지 출력

Written by Ssemi™(semin Seol), www.Ssemi.net

Request개체로 넘어온 Form-Data 쉽게 알아내기에 이어진 라이브러리 2탄!!
웹개발을 하다보면 서버스크립트인 ASP 이외에도 클라이언트 스크립트인 Javascript의 사용은 필수입니다.

아래와 같은 코드를 보십시오.

<%
   '작업 끝! - 커넥션 풀링
   IF oCn.State = 1 Then oCn.Close
%>
<script type="text/javascript">
<!--
   window.alert('확인 테스트');
   document.location.href = '/test.asp';
// -->
</script>
<%
   Response.End
%>
위와 같이 서버/클라이언트의 구분이 있을 경우에는 코딩이 지저분해지고, 중간중간마다 <% %> 구분을 해주면서 Javascript도 함께 써야 하는 불편함이 있습니다.
바로 이와 같은 코드의 불편함을 줄여주고자 프로시져를 사용하여 에러 메시지를 출력합니다.

아래는 프로시져를 사용하여 변경한 코드입니다.
<%
   '작업 끝! - 커넥션 풀링
   IF oCn.State = 1 Then oCn.Close

   FlushError "확인 테스트", "Location", null, "/test.asp"
%>
더욱 깔끔한 코드로 만들 수 있습니다. 가독성이 더욱 뛰어나집니다. ^_^

물론 이와 같은 코드를 모두들 사용하고 계실 것이라 생각합니다.
하지만 선물세트 같이 다용도로 쓰일 수 있게 만든 프로시져라 공개해봅니다 :)


FlushError Procedure

이 프로시져는 서버/클라이언트간에 Javascript 에러 메시지 사용에 있어서 유연한 코딩을 제공해줍니다.
프로시져를 사용함으로서 얻어지는 가독성과 편리함을 느껴보세요 ^_^

▶ 사용법

FlushError 프로시져에는 4가지의 인자(Argument)가 존재합니다.
  • ErrorText : 에러메시지 출력
    - 인자의 값이 Null 이거나 길이가 0 일때는 에러메시지가 나오지 않음

  • nOption : 에러메시지 이후의 행동을 명령
    - Default Value : Default // history.back() or document.location.href 의 기능을 수행
    - Back // history.go(nGo)을 통해 history 이동 가능(일반적으로 history.back()의 기능의 명령)
    - Location // document.location.href 를 통해 페이지 이동을 위한 명령
    - Close // 현재 창을 닫고 싶을 때 사용
    - Opener // 부모창을 이동시키고, 현재 창을 닫는데 사용
    - Stop // 아무 반응 없음

  • nGo : history.go(#) 안의 인수(#)
    - Default Value : -1 // history.back()과 같은 기능

  • nPlace : Location.href 를 통해 페이지 이동시에 이동할 위치를 지정
    - Default Value : / // Rootpage

▶ 코드

Sub FlushError(ErrorText, nOption, nGo, nPlace) 
   Response.Write "<script type=""text/javascript"">" & chr(13)
   Response.Write "<!-- " & chr(13)
   
   IF Not isNull(ErrorText) And Len(ErrorText) > 0 Then
       Response.Write "window.alert('"& ErrorText &"');" & chr(13)
   End IF

   IF isNull(nOption) OR Len(nOption) = 0 Then nOption = "default"
   IF isNull(nGo) OR Not isNumeric(nGo) OR Len(nGo) > 2 OR nGo = 0 Then nGo = "-1"
   IF isNull(nPlace) OR Len(nPlace) = 0 OR isNumeric(nPlace) Then nPlace = "/"

   Select Case LCase(CSTR(nOption))
       Case "back"
           Response.Write "history.go("& nGo &");" & chr(13)

       Case "location"
           Response.Write "document.location.href='"& nPlace &"';" & chr(13)

       Case "close"
           Response.Write "self.opener = self;" & chr(13)
           Response.Write "self.close();" & chr(13)

       Case "opener"
           Response.Write "if (window.opener && window.opener != null) { " & chr(13)
           Response.Write "window.opener.location.href='"& nPlace &"';" & chr(13)
           Response.Write "window.close();" & chr(13)
           Response.Write "} else { " & chr(13)
           Response.Write "window.close();" & chr(13)
           Response.Write "}" & chr(13)

       Case "default"
           Response.Write "if (history.length>0) history.go("& nGo &");" & chr(13)
           Response.Write "else document.location.href='"& nPlace &"';" & chr(13)
       Case Else

   End Select

   Response.Write "// --> " & chr(13)    
   Response.Write "</script>" & chr(13)
   Response.End
End Sub

▶ 예제코드

' 테스트1 이라는 에러메시지 출력 후 history.back()기능 수행
FlushError "테스트1", "back", -1, 1

' 테스트2 이라는 에러메시지 출력 후 /test.asp 로 이동
FlushError "테스트2", "location", -1, "/test.asp"

' 테스트3 이라는 에러메시지 출력 후 현재 창을 닫음
FlushError "테스트3", "close", -1, 1

' 테스트4 이라는 에러메시지 출력 후 부모창을 /test.asp 로 옮긴 후 현재 창을 닫음
FlushError "테스트4", "opener", -1, "/test.asp"

' 테스트5 이라는 에러메시지 출력 후 멈춤
FlushError "테스트5", "stop", -1, 1

' 에러메시지 없이 /test.asp 로 이동
FlushError "", "Location", -1, "/test.asp"
* nGo, nPlcae 인자는 nOption 에 따라 쓰일 수도, 쓰이지 않을 수도 있음에 유의하여
실제 코딩시에는 FlushError "테스트", "stop", null, null 이라는 명령이 아닌
FlushError "테스트5", "stop", -1, 1 로 쓰게 되면 훨씬 코딩의 이로움이 생깁니다.

도움이 되었길 바라면서 이만 ^_^
2006. 7. 21. 08:29

저장 프로시져 파라미터 매칭값

Stored Procedure(저장 프로시져) 코딩을 쉽게 하자를 하다가 알아버린(!) 내용입니다.

* 저장 프로시져 파라미터 매칭값
ConstantValueDescription
AdArray
(Does not apply to ADOX.)
0x2000A flag value, always combined with another data type constant, that indicates an array of that other data type.
adBigInt20Indicates an eight-byte signed integer (DBTYPE_I8).
adBinary128Indicates a binary value (DBTYPE_BYTES).
adBoolean11Indicates a boolean value (DBTYPE_BOOL).
adBSTR8Indicates a null-terminated character string (Unicode) (DBTYPE_BSTR).
adChapter136Indicates a four-byte chapter value that identifies rows in a child rowset (DBTYPE_HCHAPTER).
adChar129Indicates a string value (DBTYPE_STR).
adCurrency6Indicates a currency value (DBTYPE_CY). Currency is a fixed-point number with four digits to the right of the decimal point. It is stored in an eight-byte signed integer scaled by 10,000.
adDate7Indicates a date value (DBTYPE_DATE). A date is stored as a double, the whole part of which is the number of days since December 30, 1899, and the fractional part of which is the fraction of a day.
adDBDate133Indicates a date value (yyyymmdd) (DBTYPE_DBDATE).
adDBTime134Indicates a time value (hhmmss) (DBTYPE_DBTIME).
adDBTimeStamp135Indicates a date/time stamp (yyyymmddhhmmss plus a fraction in billionths) (DBTYPE_DBTIMESTAMP).
adDecimal14Indicates an exact numeric value with a fixed precision and scale (DBTYPE_DECIMAL).
adDouble5Indicates a double-precision floating-point value (DBTYPE_R8).
adEmpty0Specifies no value (DBTYPE_EMPTY).
adError10Indicates a 32-bit error code (DBTYPE_ERROR).
adFileTime64Indicates a 64-bit value representing the number of 100-nanosecond intervals since January 1, 1601 (DBTYPE_FILETIME).
adGUID72Indicates a globally unique identifier (GUID) (DBTYPE_GUID).
adIDispatch9Indicates a pointer to an IDispatch interface on a COM object (DBTYPE_IDISPATCH).

Note   This data type is currently not supported by ADO. Usage may cause unpredictable results.

adInteger3Indicates a four-byte signed integer (DBTYPE_I4).
adIUnknown13Indicates a pointer to an IUnknown interface on a COM object (DBTYPE_IUNKNOWN).

Note   This data type is currently not supported by ADO. Usage may cause unpredictable results.

adLongVarBinary205Indicates a long binary value (Parameter object only).
adLongVarChar201Indicates a long string value (Parameter object only).
adLongVarWChar203Indicates a long null-terminated Unicode string value (Parameter object only).
adNumeric131Indicates an exact numeric value with a fixed precision and scale (DBTYPE_NUMERIC).
adPropVariant138Indicates an Automation PROPVARIANT (DBTYPE_PROP_VARIANT).
adSingle4Indicates a single-precision floating-point value (DBTYPE_R4).
adSmallInt2Indicates a two-byte signed integer (DBTYPE_I2).
adTinyInt16Indicates a one-byte signed integer (DBTYPE_I1).
adUnsignedBigInt21Indicates an eight-byte unsigned integer (DBTYPE_UI8).
adUnsignedInt19Indicates a four-byte unsigned integer (DBTYPE_UI4).
adUnsignedSmallInt18Indicates a two-byte unsigned integer (DBTYPE_UI2).
adUnsignedTinyInt17Indicates a one-byte unsigned integer (DBTYPE_UI1).
adUserDefined132Indicates a user-defined variable (DBTYPE_UDT).
adVarBinary204Indicates a binary value (Parameter object only).
adVarChar200Indicates a string value (Parameter object only).
adVariant12Indicates an Automation Variant (DBTYPE_VARIANT).

Note   This data type is currently not supported by ADO. Usage may cause unpredictable results.

adVarNumeric139Indicates a numeric value (Parameter object only).
adVarWChar202Indicates a null-terminated Unicode character string.
adWChar130Indicates a null-terminated Unicode character string (DBTYPE_WSTR).


* SQL자료형과 ADO파라미터개체의 Type속성매칭  
SQL Server Data TypeADO Data Type
bigintadBigInt
binaryadBinary
bitadBoolean
charadChar
datetimeadDBTimeStamp
decimaladNumeric
floatadDouble
imageadVarbinary
intadInteger
moneyadCurrency
ncharadWChar
ntextadLongVarWChar
numericadNumeric
nvarcharadVarWChar
realadSingle
smalldatetimeadTimeStamp
smallintadSmallInt
smallmoneyadCurrency
sql_variantadVariant
sysnameadWChar
textadLongVarChar
timestampadBinary
tinyintadVarbinary
uniqueidentifieradGUID
varbinaryadVarbinary
varcharadVarChar

* 출처와 다르게 부분 스스로 수정한 곳

※ 출처 - SQLER
2006. 7. 20. 09:49