Web/ASP & ASP.NET2009. 4. 9. 23:35

< 출처 : korea.internet.com, 지은이 : 최현진 >

Parameter 개체

Parameter 개체는 저장 프로시저 또는 질의에 사용된 단일 매개변수에 대한 모든 정보를 나타내며, Parameters 컬렉션에 포함되어 사용된다.

Parameter 개체의 컬렉션, 메서드 및 속성을 사용하여 다음과 같은 작업을 할 수 있다.

1. Name 속성을 사용하여 매개변수의 이름을 설정하거나 반환한다.
2. Value 속성을 사용하여 매개변수의 값을 설정하거나 반환한다.
3. Attributes 속성과 Direction, Precision, NumericScale, Size 및 Type 속성을 사용하여 매개변수의 특성을 설정하거나 반환한다.
4. AppendChunk 메서드를 사용하여 긴 이진 데이터 또는 문자 데이터를 매개 변수에 전달한다.


호출하려는 저장 프로시저나 질의에 대한 매개변수의 이름과 속성을 알고 있다면 CreateParameter 메서드를 사용하여 적절한 속성 설정 값에 따라 여러 개의 Parameter 개체를 작성하고 Append 메서드를 사용하여 이들 개체를 Parameters 컬렉션에 추가할 수 있다. 이렇게 하면 공급자로부터 매개변수에 대한 정보를 검색하기 위해 Parameters 컬렉션에서 Refresh 메서드를 호출하는 등의 리소스 집약적인 작업을 하지 않아도 매개 변수의 값을 설정하거나 반환할 수 있다.


Parameter 개체의 속성


속성 설명 기본 값 데이터 형식
Attributes Parameter 개체의 특성을 나타낸다. (읽기/쓰기) 0 Long
Direction Parameter 개체가 입력 매개변수를 나타내는지, 출력 매개변수를 나타내는지, 양쪽 모두를 나타내는지 또는 매개변수가 저장 프로시저에서 반환되는 값인지의 여부를 나타낸다. (읽기/쓰기) 1 ParameterDirectionEnum
Name Parameter 개체의 이름을 나타낸다. (읽기/쓰기) "" String
NumericScale NumericScale 속성은 Parameter 개체의 숫자 값의 단위를 나타낸다. (읽기/쓰기) 0 Byte
Precision Parameter 개체의 숫자 값에 대한 정밀도를 나타낸다. (읽기/쓰기) 0 Byte
Size Parameter 개체의 최대 크기를 바이트나 문자 개수로 나타낸다. (읽기/쓰기) 0 Long
Type Parameter 개체의 데이터 형식을 나타낸다. (읽기/쓰기) 0 DataTypeEnum
Value Parameter 개체에 지정된 값을 나타낸다. Type 속성에 따라 달라진다. Variant



Attribute 속성

Attribute 속성은 Parameter 개체에 대한 하나 이상의 특성을 나타내며, ParameterAttributesEnum 값 중에서 하나 이상 값들의 합일 수 있다.


속성 설명
adParamSigned 디폴트 값. 매개변수에 부호 있는 값이 사용되었음을 나타낸다.
adParamNullable 매개변수에 Null 값이 사용되었음을 나타낸다.
adParamLong 매개변수에 긴 이진 데이터가 사용되었음을 나타낸다.



Direction 속성

Direction 속성은 Parameter 개체가 입력 매개변수를 나타내는지, 출력 매개변수를 나타내는지, 양쪽 모두를 나타내는지 또는 매개변수가 저장 프로시저에서 반환되는 값인지의 여부를 나타낸다.

이 속성은 다음과 같은 ParameterDirectionEnum 값 중 하나를 설정하거나 반환한다.


상수 설명
adParamUnknown 0 매개변수의 Direction 속성을 알 수 없음을 나타낸다.
adParamInput 1 디폴트 값. 입력 매개변수를 나타낸다.
adParamOutput 2 출력 매개변수를 나타낸다.
adParamInputOutput 3 입력 매개변수와 출력 매개변수 모두를 나타낸다.
adParamReturnValue 4 반환 값을 나타낸다.



Name 속성

Name 속성은 Parameter 개체의 이름을 나타낸다. 이 속성은 읽기와 쓰기가 모두 가능하며 String 값을 반환하거나 설정한다.

Parameters 컬렉션에 아직 추가되지 않은 Parameter 개체의 이 속성은 읽기/쓰기가 가능하며, Parameter 개체가 추가된 후에는 이 속성은 읽기 전용이다. Parameters 컬렉션 내의 개체들의 이름이 모두 고유한 이름을 가질 필요는 없다.

이 속성은 저장 프로시저 또는 질의에서 정의한 매개변수의 이름과 동일하지 않아도 상관없다. 하지만, 프로그램의 유지보수나 판독력을 높이기 위해 동일하게 작성하는 것을 권장한다.


NumericScale 속성

NumericScale 속성은 Parameter 개체의 숫자 값의 단위를 나타낸다. 이 속성은 Byte 값을 설정하거나 반환하며, 숫자 값이 들어갈 소수 자릿수를 나타낸다. 이 속성은 읽기와 쓰기가 가능하다.

NumericScale 속성을 사용하여 숫자로 된 Parameter 개체의 값을 나타낼 때 소수점 이하 몇 자리까지 사용할지를 결정한다.


Precision 속성

Precision 속성은 Parameter 개체의 숫자 값에 대한 정밀도를 나타낸다. 이 속성은 읽기와 쓰기가 가능하며, Byte 값을 설정하거나 반환한다.

이 속성을 사용하여 숫자로 된 Parameter 개체에 대한 값을 나타낼 때 사용할 최대 자릿수를 결정한다.


Size 속성

Size 속성은 Parameter 개체의 최대 크기를 바이트나 문자 개수로 나타내며, Long 값을 설정하거나 반환한다.

이 속성을 사용하여 Parameter 개체의 Value 속성에 기록될 최대값 또는 이 속성에서 읽을 최대값을 결정하며, 이 속성은 읽기와 쓰기가 모두 가능하다.

Parameter 개체에 대해 가변 길이 데이터 형식(예를 들어, adVarChar와 같은 String 형식)을 지정할 경우, Parameters 컬렉션에 개체를 추가하기 전에 먼저 개체의 Size 속성을 설정해야 하며 그렇지 않을 경우에는 오류가 발생한다.

adoPara.Type = adVarChar
'adoPara.Size = 50
adoPara.Direction = adParamInput
adoPara.Value = ""
adoCmd.Parameters.Append adoPara

위와 같이 Size를 지정하지 않으면, 다음과 같은 오류가 발생한다.



[그림] Size를 지정하지 않으면 발생하는 오류 메시지


Command 개체의 Parameters 컬렉션에 이미 Parameter 개체를 추가한 상태에서 개체 형식을 가변 길이 데이터 형식으로 변경할 경우에는 Command 개체를 실행하기 전에 먼저 Parameter 개체의 Size 속성을 설정해야 하며 그렇지 않을 경우에도 오류가 발생한다.

공급자로부터 매개 변수 정보를 얻기 위해 Refresh 메서드를 사용하고 공급자가 하나 이상의 가변 길이 데이터 형식 Parameter 개체를 반환하는 경우, ADO는 이들 매개 변수의 최대 예상 크기에 따라 매개 변수에 메모리를 할당하게 되므로 실행 중 오류가 발생할 수 있다. 오류를 방지하려면 명령을 실행하기 전에 먼저 이들 매개 변수에 대한 Size 속성을 명시적으로 설정해야 한다.


Type 속성

Type 속성은 Parameter 개체의 데이터 형식을 나타내며, 읽기와 쓰기가 모두 가능하다.

이 속성은 다음과 같은 DataTypeEnum 값 중 하나를 설정하거나 반환한다. DataTypeEnum 값은 다음과 같다.


상수 설명
adBigInt 20 8 바이트의 부호 있는 정수(DBTYPE_I8)를 나타낸다.
adBinary 128 이진 값(DBTYPE_BYTES)을 나타낸다.
adBoolean 11 Boolean 값(DBTYPE_BOOL)을 나타낸다.
adBSTR 8 Null 종결 문자열(유니코드)(DBTYPE_BSTR)을 나타낸다.
adChapter 136 Child RowSet에서 Row를 식별하기 위해서 사용되는 4 바이트 Chapter 값(DBTYPE_HCHAPTER)을 나타낸다.
adChar 129 String 값(DBTYPE_STR)을 나타낸다.
adCurrency 6 Currency 값(DBTYPE_CY)을 나타낸다. Currency는 소수점 이하의 자릿수가 4개인 고정 자릿수이다. 이 값은 10,000으로 환산된 8바이트의 부호 있는 정수로 저장된다.
adDate 7 Date 값(DBTYPE_DATE)을 나타낸다. 날짜는 Double 형식으로 저장되며, 정수 부분은 1899년 12월 30일 이후의 날짜수이며 소수 부분은 하루 중 시간을 나타낸다.
adDBDate 133 날짜 값(yyyymmdd)(DBTYPE_DBDATE)을 나타낸다.
adDBFileTime 137 파일-시간 값(DBTYPE_DBFILETIME)을 나타낸다.
adDBTime 134 시간 값(hhmmss)(DBTYPE_DBTIME)을 나타낸다.
adDBTimeStamp 135 날짜-시간 스탬프(yyyymmddhhmmss에 10억분의 1초 단위가 추가된)(DBTYPE_DBTIMESTAMP)를 나타낸다.
adDecimal 14 고정 정밀도와 크기로 나타낸 정확한 숫자 값(DBTYPE_DECIMAL)을 나타낸다.
adDouble 5 배정도의 부동 소수점 값(DBTYPE_R8)을 나타낸다.
adEmpty 0 지정된 값 없음(DBTYPE_EMPTY)을 나타낸다.
adError 10 32 비트 오류 코드(DBTYPE_ERROR)를 나타낸다.
adFileTime 64 1601년 1월 1일 이후의 1000만분의 1초 간격의 숫자를 표현하는 64 비트 값(DBTYPE_FILETIME)을 나타낸다.
adGUID 72 전역 고유 식별자(GUID)(DBTYPE_GUID)를 나타낸다.
adIDispatch 9 OLE 개체에서 IDispatch 인터페이스에 대한 포인터(DBTYPE_IDISPATCH)를 나타낸다.참고 이 데이터 형식은 ADO에 의해서 현재는 지원되지 않는다. 이 데이터 형식의 사용은 예기치 않은 결과를 초래할 수 있다.
adInteger 3 4바이트의 부호 있는 정수(DBTYPE_I4)를 나타낸다.
adIUnknown 13 OLE 개체에서 IUnknown 인터페이스에 대한 포인터(DBTYPE_IUNKNOWN)를 나타낸다.참고 이 데이터 형식은 ADO에 의해서 현재는 지원되지 않는다. 이 데이터 형식의 사용은 예기치 않은 결과를 초래할 수 있다.
adLongVarBinary 205 Long 이진 값(Parameter 개체만 해당)을 나타낸다.
adLongVarChar 201 Long String 값(Parameter 개체만 해당)을 나타낸다.
adLongVarWChar 203 Long Null 종결 문자열 값(Parameter 개체만 해당)을 나타낸다.
adNumeric 131 고정 정밀도와 크기로 나타낸 정확한 숫자 값(DBTYPE_NUMERIC)을 나타낸다.
adPropVariant 138 자동화 PROPVARIANT(DBTYPE_PROP_VARIANT)를 나타낸다.
adSingle 4 단정도의 부동 소수점 값(DBTYPE_R4)을 나타낸다.
adSmallInt 2 2 바이트의 부호 있는 정수(DBTYPE_I2)를 나타낸다.
adTinyInt 16 1 바이트의 부호 있는 정수(DBTYPE_I1)를 나타낸다.
adUnsignedBigInt 21 8 바이트의 부호 없는 정수(DBTYPE_UI8)를 나타낸다.
adUnsignedInt 19 4 바이트의 부호 없는 정수(DBTYPE_UI4)를 나타낸다.
adUnsignedSmallInt 18 2 바이트의 부호 없는 정수(DBTYPE_UI2)를 나타낸다.
adUnsignedTinyInt 17 1 바이트의 부호 없는 정수(DBTYPE_UI1)를 나타낸다.
adUserDefined 132 사용자 정의 변수(DBTYPE_UDT)를 나타낸다.
adVarBinary 204 이진 값(Parameter 개체만 해당)을 나타낸다.
adVarChar 200 String 값(Parameter 개체만 해당)을 나타낸다.
adVariant 12 자동화 Variant(DBTYPE_VARIANT)를 나타낸다.
adVarNumeric 139 숫자 값(Parameter 개체만 해당)을 나타낸다.
adVarWChar 202 Null 종결 유니코드 문자열(Parameter 개체만 해당)을 나타낸다.
adWChar 130 Null 종결 유니코드 문자열(DBTYPE_WSTR)을 나타낸다.


다음 표는 SQL 서버의 데이터 형식과 액세스의 데이터 형식을 나열한 것이며, 빈 공간은 두 데이터 형식이 직접적으로 맵핑되지 않는 것을 의미한다.


SQL 서버 액세스 Enum 값
binary Binary adVarBinary
varbinary   adVarBinary
char Text adVarChar
varchar   adVarChar
datetime   adDBTimeStamp
smalldatetime   adDBTimeStamp
float Single adSingle
real   adSingle
int Long Integer adInteger
smallint Integer adSmallInt
tinyint Byte adUnsignedTinyInt
Money Currency adCurrency
smallmoney   adCurrency
bit Yes/No adBoolean
timestamp   adVarBinary
text Memo adVarChar
image OLE Object adVarBinary
  Double adDouble
  Date/Time adDate
  Replication ID adGUID
  Value adEmpty


데이터 형식을 지정할 때 실수하기 쉬운 부분은 SQL 서버의 datetime 형식은 adDate가 아니라 adDBTimeStamp로 지정해야 한다는 것이다.


Value 속성

Value 속성을 사용하여 매개 변수 값을 설정 또는 반환하며, Value 속성의 읽기/쓰기 또는 읽기 전용 여부를 결정하는 요소에는 여러 가지가 있다.

ADO에서는 Value 속성으로 Long 이진 데이터를 설정하고 반환할 수 있다.

참고

Parameter 개체에 대해 ADO는 Provider로부터 Value 속성을 한 번만 읽는다. Parameter 개체의 Value 속성이 비어 있고, Recordset 개체를 생성하는 Command 개체인 경우 Value 속성을 검색하기 전에 먼저 Recordset 개체를 닫아야 한다. 그렇게 하지 않으면 일부 Provider에 대해 Value 속성이 비어 있을 수 있으며 정확한 값을 포함하지 않게 된다.


Parameter 개체의 메서드


메서드 설명
AppendChunk Parameter 개체에 데이터를 추가한다.



Append 메서드

Append 메서드는 Parameter 개체에 데이터를 추가하는 메서드이며, 구문은 다음과 같다.

Parameter.AppendChunk Data


여기에서 Data는 Variant 형식으로 Parameter 개체에 추가할 데이터이다.

Parameter 개체의 Attributes 속성 중에 adFldLong 비트가 True로 설정되어 있으면 해당 매개 변수에 대하여 AppendChunk 메서드를 사용할 수 있다.

Parameter 개체에서 AppendChunk를 처음 호출하면 이 매개 변수에 데이터가 기록되며 기존 데이터를 겹쳐 쓴다. 그런 다음 Parameter 개체에서 AppendChunk를 다시 호출하면 기존의 매개 변수 데이터에 추가된다.

그리고 Null 값을 전달하는 AppendChunk를 호출하면 모든 매개 변수 데이터가 삭제된다.

Posted by Huikyun