:::: 개발 ::::/::: A S P :::

ADODB.COMMAND Parameters

nayha 2009. 12. 28. 14:07
반응형

Parameters 컬렉션

Parameters 컬렉션은 Command 개체의 Parameter 개체들을 포함하고 있는 컬렉션이다.

Parameters 컬렉션은 저장 프로시저 또는 질의에 대한 매개변수를 전달할 때 주로 사용하는 개체이며, Parameter 개체는 Append 메서드를 사용해서 Parameters 컬렉션에 추가된다.

매개변수를 갖는 저장 프로시저 또는 질의를 수행할 때, 매개변수를 전달하는 방법에는 Command 개체의 Parameters 컬렉션을 사용하는 방법과 Execute 메서드의 두 번째 인수로 배열 값을 지정해서 매개변수로 넘겨주는 방법이 있다.

Command 개체를 사용하면 여러 가지 편리한 점이 있지만, 반면에 저장 프로시저로부터 다양한 Recordset 개체를 반환받지 못한다는 점이 제한 사항이다. Command 개체를 사용해서 반환되는 Recordset 개체는 디폴트 Recordset 개체로서 CursorLocation 속성은 adUseServer(2) 이며, CursorType 속성은 adOpenForwardOnly(0) 이며, LockType 속성은 adLockReadOnly(1) 이다.

Parameters 컬렉션은 한 개의 속성과 네 개의 메서드를 가지고 있다.

Parameters 컬렉션의 속성

속성 설명 기본 값 데이터 형식
Count Parameters 컬렉션에 포함된 Parameter 개체의 개수를 반환한다 (읽기 전용) 0 Long
Item 이름이나 인덱스를 사용해서 Parameters 컬렉션에서 특정 Parameter 구성원을 반환한다. 없음 Parameter

Count 속성

Count 속성은 Parameters 컬렉션에 포함된 Parameter 개체의 개수를 반환한다. 이 속성의 데이터 형식은 Long이며, 읽기 전용이다.

루프를 사용해서 Parameters 컬렉션의 모든 Parameter 개체를 반복해서 처리하려면 For Each…Next 문을 사용한다.

Count 속성이 0이면 컬렉션 내에 Parameter 개체가 존재하지 않는다.

[예제]

다음 예제는 SQL 서버의 Pubs 데이터 베이스에 있는 byroyalty라는 저장 프로시저를 실행하는 예이며, Parameters 개체의 Count 속성을 사용해서 매개변수의 개수를 MsgBox로 나타낸다.

Private Sub cmdCount_Click()
  Dim adocn As New ADODB.Connection
  Dim adoCmd As New ADODB.Command
  Dim adoPara As New ADODB.Parameter
  Dim adoRs As New ADODB.Recordset
  Dim strConn As String

  strConn = "Provider=sqloledb;" & _
        "Data Source=(local);Initial Catalog=Pubs;User ID=sa;Password=; "

  adocn.Open strConn

  Set adoCmd.ActiveConnection = adocn

  adoCmd.CommandText = "byroyalty"
  adoCmd.CommandType = adCmdStoredProc
  adoCmd.CommandTimeout = 15

  adoPara.Type = adInteger
  adoPara.Size = 3
  adoPara.Direction = adParamInput
  adoPara.Value = 100
  adoCmd.Parameters.Append adoPara

  MsgBox "Count 속성 값 : " & adoCmd.Parameters.Count

  ' 명령을 실행해서 Recordset 개체 생성
  Set adoRs = adoCmd.Execute()

  adoRs.Close
  Set adoRs = Nothing

  Set adoCmd = Nothing

  adocn.Close
  Set adocn = Nothing
End Sub

Item 속성

Item 속성은 이름이나 인덱스를 사용해서 Parameters 컬렉션에서 특정 Parameter 구성원을 반환하는 속성이며, Item 속성의 구문은 다음과 같다.

Set adoPara = adoCmd.Parameters.Item(Index)

위의 구문에서 매개변수 Index는 컬렉션에 들어 있는 개체의 이름이나 개체의 위치 순서를 나타내는 서수로 평가되는 Variant 값이다.

Item 속성은 Parameters 컬렉션의 기본 속성이며, 생략할 수 있다. 그래서 다음과 같은 구문을 모두 사용할 수 있다.

  adoCmd.Parameters.Item(Index)
  adoCmd(Index)
  adoCmd.Parameters("Name")

Parameters 컬렉션의 메서드

속성 설명
Append Parameters 컬렉션에 Parameter 개체를 추가한다.
Delete Parameters 컬렉션에서 Parameter 개체를 제거한다.
Refresh Parameters 컬렉션에 있는 Parameter 개체들의 목록을 갱신한다.

Append 메서드

Append 메서드는 Parameter 컬렉션에 Parameter 개체를 추가하는 메서드이며, 다음과 같이 사용된다.

  Dim adoCmd As New ADODB.Command
  Dim adoPara As New ADODB.Parameter

  adoCmd.CommandText = "byroyalty"
  adoCmd.CommandType = adCmdStoredProc
  adoCmd.CommandTimeout = 15

  adoPara.Type = adInteger
  adoPara.Size = 3
  adoPara.Direction = adParamInput
  adoPara.Value = 100
  adoCmd.Parameters.Append adoPara

저장 프로시저의 매개변수 목록을 얻기 위해서 Refresh 메서드를 사용할 수 있다. 하지만, Refresh 메서드를 사용하면 네트워크를 통해서 데이터베이스에 한번 더 갔다 오기 때문에 응용 프로그램의 속도를 저하시키는 요인이 될 수 있다. 그렇기 때문에 매개변수를 Append 하는 것이 Refresh 메서드 보다 더 효율적이다.

Parameters 컬렉션에 Parameter 개체를 추가하려면 먼저 이 개체의 Type 속성을 설정해야 하며, 가변 길이 데이터 형식을 선택한 경우에는 Size 속성을 0보다 큰 값으로 설정해야 한다.

Delete 메서드

Delete 메서드는 Parameter 컬렉션에서 Parameter 개체를 제거하는 메서드이며, Parameter 개체의 이름 또는 인덱스를 사용해서 제거할 수 있다.

Delete 메서드는 다음과 같이 사용한다.

adoCmd.Parameters.Delete 0

위의 코드는 Command 개체의 첫번째 Parameter 개체를 제거하는 예이다.

Refresh 메서드

Refresh 메서드는 Parameters 컬렉션에 있는 Parameter 개체들의 목록을 갱신하는 메서드이다. 이 메서드는 Parameter의 정보를 갱신하기 위해서 데이터 소스까지 네트워크를 통해서 갔다 오는 성능 저하를 감수할 경우에 사용된다.

Refresh 메서드는 다음과 같이 사용한다.

  adoCmd.Parameters.Refresh
  adoCmd.Parameters.Item(1).Value = "가"

Refresh 메서드를 호출하기 위해서는 Command 개체의 ActiveConnection 속성을 유효한 Connection 개체로, CommandText 속성을 유효한 명령으로 그리고 CommandType 속성을 adCmdStoredProc로 설정해야 한다.

Posted by
반응형