다음을 통해 공유


스크립트 구성 요소 개체 모델 이해

[스크립트 구성 요소 코딩 및 디버깅](.에 설명된 대로. /extending-packages-scripting/data-flow-script-component/coding-and-debugging-the-script-component.md, 스크립트 구성 요소 프로젝트에는 세 가지 프로젝트 항목이 포함됩니다.

  1. ScriptMain 코드를 작성하는 클래스를 ScriptMain 포함하는 항목입니다. ScriptMain 클래스는 UserComponent 클래스에서 상속합니다.

  2. ComponentWrapper 클래스를 포함하는 UserComponent 항목으로, 해당 인스턴스 ScriptComponent 에는 데이터를 처리하고 패키지와 상호 작용하는 데 사용할 메서드와 속성이 포함됩니다. 항목에는 ComponentWrapperConnectionsVariables 컬렉션 클래스도 포함됩니다.

  3. BufferWrapper 각 입력 및 출력에 대해 상속 ScriptBuffer 되는 클래스와 각 열에 대한 형식화된 속성을 포함하는 항목입니다.

ScriptMain 항목에서 코드를 작성할 때는 이 항목에 설명된 개체, 메서드 및 속성을 사용합니다. 각 구성 요소는 여기에 나열된 모든 메서드를 사용하지 않습니다. 그러나 사용되는 경우 표시된 시퀀스에서 사용됩니다.

기본 클래스는 이 ScriptComponent 항목에서 설명하는 메서드에 대한 구현 코드를 포함하지 않습니다. 따라서 메서드의 고유한 구현에 기본 클래스 구현에 대한 호출을 추가하는 것은 불필요하지만 무해합니다.

특정 유형의 스크립트 구성 요소에서 이러한 클래스의 메서드 및 속성을 사용하는 방법에 대한 자세한 내용은 추가 스크립트 구성 요소 예제 섹션 을 참조하세요. 예제 항목에는 전체 코드 샘플도 포함되어 있습니다.

AcquireConnections 메서드

원본 및 대상은 일반적으로 외부 데이터 원본에 연결해야 합니다. AcquireConnections 기본 클래스의 ScriptComponent 메서드를 재정의하여 적절한 연결 관리자에서 연결 또는 연결 정보를 검색합니다.

다음 예제에서는 ADO.NET 연결 관리자에서 반환 System.Data.SqlClient.SqlConnection 합니다.

Dim connMgr As IDTSConnectionManager100
Dim sqlConn As SqlConnection

Public Overrides Sub AcquireConnections(ByVal Transaction As Object)

    connMgr = Me.Connections.MyADONETConnection
    sqlConn = CType(connMgr.AcquireConnection(Nothing), SqlConnection)

End Sub

다음 예제에서는 플랫 파일 연결 관리자 전체 경로 및 파일 이름을 반환한 다음 , 를 사용하여 System.IO.StreamReader파일을 엽니다.

Private textReader As StreamReader
Public Overrides Sub AcquireConnections(ByVal Transaction As Object)

    Dim connMgr As IDTSConnectionManager100 = _
        Me.Connections.MyFlatFileSrcConnectionManager
    Dim exportedAddressFile As String = _
        CType(connMgr.AcquireConnection(Nothing), String)
    textReader = New StreamReader(exportedAddressFile)

End Sub

PreExecute 메서드

데이터 행 처리를 PreExecute 시작하기 전에 한 번만 수행해야 하는 처리가 있을 때마다 기본 클래스의 메서드를 재정 ScriptComponent 의합니다. 예를 들어 대상에서 대상에서 데이터 원본에 각 데이터 행을 삽입하는 데 사용할 매개 변수가 있는 명령을 구성할 수 있습니다.

    Dim sqlConn As SqlConnection
    Dim sqlCmd As SqlCommand
    Dim sqlParam As SqlParameter
...
    Public Overrides Sub PreExecute()

        sqlCmd = New SqlCommand("INSERT INTO Person.Address2(AddressID, City) " & _
            "VALUES(@addressid, @city)", sqlConn)
        sqlParam = New SqlParameter("@addressid", SqlDbType.Int)
        sqlCmd.Parameters.Add(sqlParam)
        sqlParam = New SqlParameter("@city", SqlDbType.NVarChar, 30)
        sqlCmd.Parameters.Add(sqlParam)

    End Sub
SqlConnection sqlConn; 
SqlCommand sqlCmd; 
SqlParameter sqlParam; 

public override void PreExecute() 
{ 

    sqlCmd = new SqlCommand("INSERT INTO Person.Address2(AddressID, City) " + "VALUES(@addressid, @city)", sqlConn); 
    sqlParam = new SqlParameter("@addressid", SqlDbType.Int); 
    sqlCmd.Parameters.Add(sqlParam); 
    sqlParam = new SqlParameter("@city", SqlDbType.NVarChar, 30); 
    sqlCmd.Parameters.Add(sqlParam); 

}

입력 및 출력 처리

입력 처리

변환 또는 대상으로 구성된 스크립트 구성 요소에는 하나의 입력이 있습니다.

BufferWrapper 프로젝트 항목이 제공하는 내용

구성한 각 입력에 BufferWrapper 대해 프로젝트 항목에는 입력과 이름이 같고 파생되는 ScriptBuffer 클래스가 포함됩니다. 각 입력 버퍼 클래스에는 다음과 같은 속성, 함수 및 메서드가 포함됩니다.

  • 선택한 각 입력 열에 대해 명명된 형식의 접근자 속성입니다. 이러한 속성은 스크립트 변환 편집기의 입력 열 페이지에 있는 열에 지정된 사용 유형따라 읽기 전용 또는 읽기/쓰기가 가능합니다.

  • 선택한 각 입력 열에 대한 <column>_IsNull 속성. 이 속성은 열에 지정된 사용 유형따라 읽기 전용이거나 읽기/쓰기가 가능합니다.

  • 구성된 각 출력에 대한 DirectRowTo<outputbuffer> 메서드. 이러한 메서드는 행을 동일한 ExclusionGroup의 여러 출력 중 하나로 필터링할 때 사용합니다.

  • NextRow 다음 입력 행을 가져오는 함수 및 EndOfRowset 데이터의 마지막 버퍼가 처리되었는지 여부를 확인하는 함수입니다. 일반적으로 기본 클래스에서 구현된 입력 처리 메서드를 사용할 때는 이러한 함수가 UserComponent 필요하지 않습니다. 다음 섹션에서는 기본 클래스에 UserComponent 대한 자세한 정보를 제공합니다.

ComponentWrapper 프로젝트 항목이 제공하는 내용

ComponentWrapper 프로젝트 항목에는 에서 UserComponent파생되는 클래스 ScriptComponent 가 포함되어 있습니다. 사용자 지정 코드를 작성하는 클래스는 ScriptMain .에서 UserComponent차례로 파생됩니다. 클래스에는 UserComponent 다음 메서드가 포함됩니다.

  • 메서드의 재정의된 구현입니다 ProcessInput . 이 메서드는 데이터 흐름 엔진에서 런타임에 PreExecute 메서드 다음으로 호출하는 메서드이며 여러 번 호출될 수 있습니다. ProcessInput은 inputbuffer<_ProcessInput>대한 처리를 해제합니다. 그런 다음, 메서드는 ProcessInput 입력 버퍼의 끝을 확인하고 버퍼의 끝에 도달한 경우 재정의 가능한 FinishOutputs 메서드와 private MarkOutputsAsFinished 메서드를 호출합니다. 그런 다음 메서드는 MarkOutputsAsFinished 마지막 출력 버퍼를 호출 SetEndOfRowset 합니다.

  • <inputbuffer>_ProcessInput 메서드의 재정의 가능한 구현. 이 기본 구현은 단순히 각 입력 행을 반복하며 <inputbuffer>_ProcessInputRow를 호출합니다.

  • <inputbuffer>_ProcessInputRow 메서드의 재정의 가능한 구현. 기본 구현은 비어 있습니다. 사용자 지정 데이터 처리 코드를 작성하기 위해 일반적으로 재정의하는 방법입니다.

사용자 지정 코드에서 수행해야 하는 사항

다음 메서드를 사용하여 클래스의 입력을 처리할 ScriptMain 수 있습니다.

  • <inputbuffer>_ProcessInputRow를 재정의하여 각 입력 행의 데이터를 전달할 때 처리합니다.

  • 입력 행을 반복하면서 추가 작업을 수행해야 하는 경우에만 <inputbuffer>_ProcessInput을 재정의합니다. 예를 들어 모든 행이 처리된 후 다른 작업을 수행하도록 테스트 EndOfRowset 해야 합니다. inputbuffer<_ProcessInputRow>하여 행 처리를 수행합니다.

  • 출력이 닫히기 전에 작업을 수행해야 하는 경우 재정 FinishOutputs 의합니다.

메서드는 ProcessInput 이러한 메서드가 적절한 시간에 호출되도록 합니다.

출력 처리

원본 또는 변환으로 구성된 스크립트 구성 요소에는 하나 이상의 출력이 있습니다.

BufferWrapper 프로젝트 항목이 제공하는 내용

구성한 각 출력에 대해 BufferWrapper 프로젝트 항목은 출력에서 파생 ScriptBuffer 되고 출력과 동일한 이름을 가진 클래스를 포함합니다. 각 입력 버퍼 클래스에는 다음과 같은 속성과 메서드가 포함됩니다.

  • 각 출력 열에 대한 명명된 형식화된 쓰기 전용 접근자 속성입니다.

  • 열< 값을 설정하는 데 사용할 수 있는 선택한 각 출력 열에 대한 쓰기 전용> 열_IsNull 속성null입니다.

  • 비어 있는 새 행을 출력 버퍼에 추가하는 데 사용하는 AddRow 메서드

  • SetEndOfRowset 데이터 흐름 엔진에 더 이상 데이터 버퍼가 필요하지 않음을 알리는 메서드입니다. 현재 버퍼가 데이터의 마지막 버퍼인지 여부를 확인하는 함수도 EndOfRowset 있습니다. 일반적으로 기본 클래스에서 구현된 입력 처리 메서드를 사용할 때는 이러한 함수가 UserComponent 필요하지 않습니다.

ComponentWrapper 프로젝트 항목이 제공하는 내용

ComponentWrapper 프로젝트 항목에는 에서 UserComponent파생되는 클래스 ScriptComponent 가 포함되어 있습니다. 사용자 지정 코드를 작성하는 클래스는 ScriptMain .에서 UserComponent차례로 파생됩니다. 클래스에는 UserComponent 다음 메서드가 포함됩니다.

  • 메서드의 재정의된 구현입니다 PrimeOutput . 데이터 흐름 엔진에서는 런타임에 이 메서드를 ProcessInput보다 먼저 호출하며 이 메서드는 한 번만 호출됩니다. PrimeOutput 메서드에 대한 처리를 끊습니다 CreateNewOutputRows . 그런 다음 구성 요소가 원본인 경우, 즉 구성 요소에 입력이 없는 경우 PrimeOutput은 재정의 가능한 FinishOutputs 메서드와 프라이빗 MarkOutputsAsFinished 메서드를 호출합니다. 메서드는 MarkOutputsAsFinished 마지막 출력 버퍼를 호출 SetEndOfRowset 합니다.

  • CreateNewOutputRows 메서드의 재정의 가능한 구현. 기본 구현은 비어 있습니다. 사용자 지정 데이터 처리 코드를 작성하기 위해 일반적으로 재정의하는 방법입니다.

사용자 지정 코드에서 수행해야 하는 사항

다음 메서드를 사용하여 클래스의 출력을 처리할 ScriptMain 수 있습니다.

  • 입력 행을 처리하기 전에 출력 행을 추가하고 채울 수 있는 경우에만 재정 CreateNewOutputRows 의합니다. 예를 들어 원본에서 사용할 CreateNewOutputRows 수 있지만 비동기 출력이 있는 변환에서는 입력 데이터를 처리하는 동안 또는 처리 후에 호출 AddRow 해야 합니다.

  • 출력이 닫히기 전에 작업을 수행해야 하는 경우 재정 FinishOutputs 의합니다.

메서드는 PrimeOutput 이러한 메서드가 적절한 시간에 호출되도록 합니다.

PostExecute 메서드

데이터 행을 PostExecute 처리한 ScriptComponent 후에만 한 번만 수행해야 하는 처리가 있을 때마다 기본 클래스의 메서드를 재정의합니다. 예를 들어 원본에서 데이터를 데이터 흐름에 로드하는 데 사용한 항목을 닫 System.Data.SqlClient.SqlDataReader 을 수 있습니다.

중요합니다

컬렉션 ReadWriteVariables 은 메서드에서 PostExecute 만 사용할 수 있습니다. 따라서 각 데이터 행을 처리할 때 패키지 변수의 값을 직접 증분할 수 없습니다. 대신, 지역 변수의 값을 증가시키고 모든 데이터가 처리된 후 패키지 변수의 값을 메서드의 지역 변수 PostExecute 값으로 설정합니다.

ReleaseConnections 메서드

원본 및 대상은 일반적으로 외부 데이터 원본에 연결해야 합니다. ReleaseConnections 기본 클래스의 ScriptComponent 메서드를 재정의하여 이전에 AcquireConnections 메서드에서 연 연결을 닫고 해제합니다.

    Dim connMgr As IDTSConnectionManager100
...
    Public Overrides Sub ReleaseConnections()

        connMgr.ReleaseConnection(sqlConn)

    End Sub
IDTSConnectionManager100 connMgr;

public override void ReleaseConnections()
{

    connMgr.ReleaseConnection(sqlConn);

}

Integration Services 아이콘(작음) Integration Services를 사용하여 최신 상태 유지
Microsoft의 최신 다운로드, 문서, 샘플 및 비디오와 커뮤니티에서 선택한 솔루션은 MSDN의 Integration Services 페이지를 방문하세요.

MSDN의 Integration Services 페이지 방문

이러한 업데이트에 대한 자동 알림을 보려면 페이지에서 사용할 수 있는 RSS 피드를 구독합니다.

참고 항목

스크립트 구성 요소 편집 기 [스크립트 구성 요소 코딩 및 디버깅](.)에서 스크립트 구성 요소 구성 /extending-packages-scripting/data-flow-script-component/coding-and-debugging-the-script-component.md