Web/ASP & ASP.NET2009. 4. 10. 12:34

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

LockType 속성

LockType 속성은 Recordset 개체 내의 레코드를 편집할 동안 해당 레코드에 설정할 Lock 유형을 나타낸다.

LockType 속성에는 아래의 LockTypeEnum 값들 중 하나를 지정할 수 있다.


상수 설명
adLockReadOnly 기본값. 읽기 전용-데이터를 변경할 수 없다.
adLockPessimistic 독점 잠금, 레코드별-제공자는 레코드가 성공적으로 편집되도록 하기 위해 대개 편집을 시작하면 그 즉시 데이터 원본의 레코드를 잠근다
adLockOptimistic 공유 잠금, 레코드별-제공자는 Update 메서드를 호출할 경우에만 레코드를 잠그는 공유 잠금을 사용한다.
adLockBatchOptimistic 공유 일괄 업데이트-즉시 업데이트 모드와 대조되는 일괄 업데이트 모드에 필요하다


Recordset을 열기 전에 LockType 속성을 설정하여 Recordset을 열 때 사용할 Lock 형식을 지정한다. LockType 속성은 Recordset이 닫혀 있을 때는 읽기/쓰기가 가능하며 열려 있을 때는 읽기 전용이다.

Provider가 모든 Lock 형식을 지원하지는 않는다. Provider가 요청된 LockType 설정을 지원하지 못할 경우에는 오류가 발생하지는 않고 다른 형식의 LockType을 대신 사용한다.

Client Side 커서일 경우에는 Pessimistic Locking을 사용할 수 없다.

클라이언트 (ADOR) Recordset 개체에서 사용될 경우 LockType 속성은 adLockOptimisticBatch로만 설정될 수 있다.

[예제]
다음 예제는 Pubs 데이터베이스의 Authors 테이블을 adLockOptimistic로 생성하는 예이다.

Private Sub cmdLockType_Click()
  Dim adoCn As New Connection
  Dim adoRs As New Recordset
  Dim strConn As String

  strConn = "Provider=sqloledb;Data Source=(local);Initial Catalog=pubs;User Id=sa;Password=;"
  adoCn.Open strConn

  adoRs.CursorType = adOpenKeyset
  adoRs.LockType = adLockOptimistic
  adoRs.Open "Authors", adoCn

  adoRs.Close
  Set adoRs = Nothing

  adoCn.Close
  Set adoCn = Nothing
End Sub


MarchalOptions 속성

MarchalOptions 속성은 서버로 다시 마샬링될 레코드를 나타낸다. 이 속성은 다음 상수 중 하나의 Long 값을 설정하거나 반환한다.


상수 설명
adMarshalAll 기본값, 모든 행이 서버에 반환됨을 나타낸다.
adMarshalModifiedOnly 수정된 행만 서버에 반환됨을 나타낸다.


클라이언트(ADOR) Recordset을 사용할 때 클라이언트에서 수정된 레코드는 마샬링(Marchaling)이라는 기법을 통해 중간 계층이나 웹 서버로 다시 보내진다. 마샬링은 스레드나 프로세스 경계를 통과하도록 인터페이스 메서드 매개 변수를 패키징하여 보내는 프로세스이다. MarshalOptions 속성을 설정하면 수정된 원격 데이터를 업데이트하기 위해 중간 계층이나 웹 서버로 다시 마샬링할 때 성능을 향상시킬 수 있다.

[예제]
다음 예제는 사용자의 입력을 받아서 MarshalOptions 속성을 지정하여 데이터를 처리하는 예이다.

Private Sub cmdMarshalOptions_Click()
  Dim adoRs As New Recordset
  Dim strConn As String
  Dim strOldFirst As String
  Dim strOldLast As String
  Dim strMessage As String
  Dim strMarshalAll As String
  Dim strMarshalModified As String

  'Employee 테이블에서 이름이 있는 레코드 집합을 엽니다.
  strConn = "Provider=sqloledb;Data Source=(local);Initial Catalog=pubs;User Id=sa;Password=;"

  adoRs.CursorLocation = adUseClient
  adoRs.Open "SELECT fname, lname FROM Employee ORDER BY lname", strConn, adOpenKeyset, adLockOptimistic

  '원래 데이터를 저장합니다.
  strOldFirst = adoRs!fname
  strOldLast = adoRs!lname

  '편집 버퍼의 데이터를 변경합니다.
  adoRs!fname = "Linda"
  adoRs!lname = "Kobara"

  '버퍼 내용을 보여주고 사용자 입력을 얻습니다.
  strMessage = "Edit in progress:" & vbCr & "원본 데이터 = " & strOldFirst & " " & _
    strOldLast & vbCr & "버퍼 내에 있는 데이터 = " & adoRs!fname & " " & _
    adoRs!lname & vbCr & vbCr & "Recordset 내에 있는 원본 데이터를 버퍼 내에 있는 데이터로 교체하시겠습니까?"

  strMarshalAll = "모든 레코드를 서버에 보내시겠습니까?"
  strMarshalModified = "변경된 레코드만 서버에 보내시겠습니까?"

  If MsgBox(strMessage, vbYesNo) = vbYes Then
    If MsgBox(strMarshalAll, vbYesNo) = vbYes Then
      adoRs.MarshalOptions = adMarshalAll
      adoRs.Update
    ElseIf MsgBox(strMarshalModified, vbYesNo) = vbYes Then
      adoRs.MarshalOptions = adMarshalModifiedOnly
      adoRs.Update
    End If
  End If

  '결과 데이터를 보여줍니다.
  MsgBox "Recordset 내에 있는 데이터 = " & adoRs!fname & " " & adoRs!lname

  '이 코드는 데모이므로 원래 데이터를 복원합니다.
  If Not (strOldFirst = adoRs!fname And strOldLast = adoRs!lname) Then
    adoRs!fname = strOldFirst
  adoRs!lname = strOldLast
    adoRs.Update
  End If

  adoRs.Close
  Set adoRs = Nothing
End Sub


MaxRecords 속성

MaxRecords 속성은 질의에서 Recordset 개체에 반환되는 최대 레코드 개수를 나타내며, Long 값을 설정하거나 반환한다. 기본 값은 0이며 무제한이다.

이 속성을 사용하여 Provider가 데이터 원본에서 반환하는 레코드 개수를 제한할 수 있다. 이 속성의 기본 설정값은 0이며, 이것은 Provider가 요청된 모든 레코드를 반환한다는 의미이다.

이 속성은 Recordset 개체가 닫혀 있을 경우에는 읽기와 쓰기가 모두 가능하며, 열려 있을 경우에는 읽기 전용이다.

[예제]
다음 예제는 Pubs 데이터베이스의 Titles 테이블에서 가격이 제일 비싼 10개 레코드를 반환하는 예이다.
Private Sub cmdMaxRecords_Click()
  Dim adoRs As New Recordset
  Dim strConn As String

  'Titles 테이블에서 가장 비싼 제목 10개를 포함하는 레코드 집합을 엽니다.
  strConn = "Provider=sqloledb;Data Source=(local);Initial Catalog=pubs;User Id=sa;Password=;"

   adoRs.MaxRecords = 10
   adoRs.Open "SELECT Title, Price FROM Titles ORDER BY Price DESC", strConn, , , adCmdText

  '레코드 집합의 내용을 표시합니다.
  Debug.Print "가장 비싼 상위 10개의 레코드:"

  Do While Not adoRs.EOF
    Debug.Print " " & adoRs!Title & " - " & adoRs!Price
    adoRs.MoveNext
  Loop

  adoRs.Close
  Set adoRs = Nothing
End Sub


PageCount 속성

PageCount 속성은 Recordset 개체에 들어 있는 데이터의 페이지 수를 나타내며, Long 값을 반환한다.

이 속성을 사용하여 Recordset 개체에 있는 데이터의 페이지 수를 결정한다. 페이지는 PageSize 속성 설정값과 동일한 크기를 가진 레코드 그룹이며, 마지막 페이지가 PageSize 속성 값보다 적은 수의 레코드를 가지고 있더라도 PageCount 값에 추가 페이지로 계산된다.

Recordset 개체가 이 속성을 지원하지 않을 경우에는 -1 값을 반환한다.

[예제]
다음 예제는 Pubs 데이터베이스의 Employee 테이블의 레코드를 5개씩 PageSize 속성과 PageCount 속성을 사용해서 화면에 표시하는 예이다.
Private Sub cmdPageCount_Click()
  Dim adoRs As New Recordset
  Dim strConn As String
  Dim strMessage As String
  Dim intPage As Integer
  Dim intPageCount As Integer
  Dim intRecord As Integer

  '클라이언트 커서를 사용하여 employee 테이블에 대한 레코드 집합을 엽니다.
  strConn = "Provider=sqloledb;Data Source=(local);Initial Catalog=pubs;User Id=sa;Password=;"

  '클라이언트 커서를 사용하여 AbsolutePosition 속성을 사용할 수 있게 합니다.
  adoRs.CursorLocation = adUseClient
  adoRs.Open "employee", strConn, , , adCmdTable

  '한번에 레코드 5개씩 이름과 고용 날짜를 표시합니다.
  adoRs.PageSize = 5
  intPageCount = adoRs.PageCount

  For intPage = 1 To intPageCount
    adoRs.AbsolutePage = intPage
    strMessage = ""
    For intRecord = 1 To adoRs.PageSize
      strMessage = strMessage & adoRs!fname & " " & adoRs!lname & " " & adoRs!hire_date & vbCr
      adoRs.MoveNext

      If adoRs.EOF Then Exit For
    Next intRecord
    MsgBox strMessage
  Next intPage

  adoRs.Close
  Set adoRs = Nothing
End Sub


PageSize 속성

PageSize 속성은 Recordset 개체에서 페이지 하나를 구성하는 레코드 수를 나타내며, Long 값을 설정하거나 반환한다. 기본 값은 10이다.

이 속성을 사용하여 데이터의 논리적 페이지 하나에 들어 있는 레코드 수를 결정할 수 있으며, 페이지 크기를 설정하면 AbsolutePage 속성을 사용하여 특정 페이지의 첫째 레코드로 이동할 수 있다. 이 기능은 사용자가 페이지를 넘기면서 한번에 일정한 개수의 레코드를 볼 수 있게 하는 웹 프로그램 시나리오에서 유용하게 사용할 수 있다.

이 속성은 언제든지 설정할 수 있으며, 그 값은 특정 페이지의 첫째 레코드 위치를 계산하는데 사용된다.

이 속성의 예제는 PageCount 속성의 예제를 참조한다.


Properties 속성

Properties 속성은 Properties 컬렉션을 나타내며, 이 컬렉션은 한 개체의 특정 인스턴스에 대한 모든 Property 개체들을 포함한다.

Property 개체는 특정 Provider 마다 고유한 ADO 개체의 특성과 일치한다.

Property 개체는 다음과 같은 네 가지 기본 속성을 가지고 있다.


상수 설명
Name 해당 속성을 식별하는 문자열이다.
Type 속성의 데이터 형식을 지정하는 정수값이다.
Value 속성 설정에 들어 있는 Variant 값이다.
Attributes 공급자 특유의 속성 특성을 나타내는 Long 값이다.


[예제]
다음 예제는 Pubs 데이터베이스의 Employee 테이블에 연결된 Recordset 개체의 Properties 속성을 보여주는 예이다.

Private Sub cmdProperties_Click()
  Dim adoRs As New Recordset
  Dim strConn As String
  Dim i As Integer

  strConn = "Provider=sqloledb;Data Source=(local);Initial Catalog=pubs;User Id=sa;Password=; "

  adoRs.CursorLocation = adUseClient
  adoRs.Open "employee", strConn, , , adCmdTable

  For i = 0 To adoRs.Properties.Count - 1
    Debug.Print adoRs.Properties(i).Name & " : " & adoRs.Properties(i).Value
  Next i

  adoRs.Close
  Set adoRs = Nothing
End Sub

위의 예제에 대한 결과는 다음과 같으며, 이 결과는 Provider에 따라 다르게 나타날 수 있다.


   IAccessor : True
   IChapteredRowset : True
   IColumnsInfo : True
   IColumnsRowset : True
   IConnectionPointContainer : True
   IConvertType : True
   ILockBytes : False
   IRowset : True
   IDBAsynchStatus : False
   IParentRowset : True
   IRowsetChange : False
   IRowsetExactScroll : True
   IRowsetFind : True
   IRowsetIdentity : True
   IRowsetInfo : True
   IRowsetLocate : True
   IRowsetRefresh : True
   IRowsetResynch : False
   IRowsetScroll : True
   IRowsetUpdate : False
   IRowsetView : True
   IRowsetIndex : False
   ISequentialStream : True
   IStorage : False
   IStream : False
   ISupportErrorInfo : True
   Preserve on Abort : True
   Access Order : 2
   Append-Only Rowset : False
   Blocking Storage Objects : False
   Use Bookmarks : True
   Skip Deleted Bookmarks : True
   Bookmark Type : 1
   Cache Deferred Columns : False
   Fetch Backwards : True
   Hold Rows : True
   Scroll Backwards : True
   Change Inserted Rows : True
   Column Privileges : False
   Command Time Out : 0
   Preserve on Commit : True
   Defer Column : False
   Delay Storage Object Updates : True
   Private1 :
   Filter Operations : 27
   Find Operations : 27
   Hidden Columns : 0
   Immobile Rows : True
   Literal Bookmarks : True
   Literal Row Identity : True
   Maximum Open Rows : 0
   Maximum Pending Rows : 0
   Maximum Rows : 0
   Column Writable : False
   Memory Usage : 0
   Notification Granularity : 1
   Notification Phases : 31
   Column Set Notification : 3
   Row Delete Notification : 3
   Row First Change Notification : 3
   Row Insert Notification : 3
   Row Resynchronization Notification : 3
   Rowset Release Notification : 3
   Rowset Fetch Position Change Notification : 3
   Row Undo Change Notification : 3
   Row Undo Delete Notification : 3
   Row Undo Insert Notification : 3
   Row Update Notification : 3
   Bookmarks Ordered : True
   Others' Inserts Visible : False
   Others' Changes Visible : False
   Own Inserts Visible : True
   Own Changes Visible : True
   Quick Restart : True
   Reentrant Events : True
   Remove Deleted Rows : True
   Report Multiple Changes : False
   Return Pending Inserts : True
   Row Privileges : False
   Asynchronous Rowset Processing : 16
   Row Threading Model : 1
   Server Cursor : False
   Strong Row Identity : True
   Objects Transacted : False
   Unique Rows : False
   Updatability : 7
   Batch Size : 15
   Update Criteria : 2
   Background Fetch Size : 15
   Initial Fetch Size : 50
   Background thread Priority : 3
   Cache Child Rows : True
   Maintain Change Status : False
   Auto Recalc : 1
   Unique Table :
   Unique Schema :
   Unique Catalog :
   Resync Command :
   Cursor Engine Version : 25
   Reshape Name :
   Update Resync : 1
   Bookmarkable : True



RecordCount 속성

RecordCount 속성은 Recordset 개체의 현재 레코드 수를 나타내며, Long 값을 반환한다.

이 속성을 사용하면 Recordset 개체에 있는 레코드의 개수를 알 수 있으며, 이 속성을 지원하지 못할 경우에는 -1을 반환한다. 또한 닫힌 Recordset 개체에서 이 속성을 읽으면 오류가 발생한다.

이 속성은 CursorLocation 속성과 CursorType 속성에 따라 지원 여부가 결정되며, 다음과 같은 환경에서 사용여부가 결정된다.


CursorType/CursorLocation Server Side Client Side
adOpenForwardOnly X X
adOpenKeyset O X
adOpenDynamic X X
adOpenStatic O O


[예제]
다음 예제는 Pubs 데이터베이스의 Employees 테이블의 레코드 개수를 반환하는 예이다.

Private Sub cmdRecordCount_Click()
  Dim adoRs As New Recordset
  Dim strConn As String

  strConn = "Provider=sqloledb;Data Source=(local);Initial Catalog=pubs;User Id=sa;Password=;"

  adoRs.CursorLocation = adUseClient
  adoRs.Open "employee", strConn, , , adCmdTable

  Debug.Print "레코드 개수 : " & adoRs.RecordCount

  adoRs.Close
  Set adoRs = Nothing
End Sub
Posted by Huikyun