스크립트 구성 요소 개체 모델 이해Understanding the Script Component Object Model

에 설명 된 대로 코딩 및 스크립트 구성 요소 디버깅, 스크립트 구성 요소 프로젝트에는 세 개의 프로젝트 항목이 포함 되어 있습니다.As discussed in Coding and Debugging the Script Component, the Script component project contains three project items:

  1. ScriptMain 포함 하는 항목이 ScriptMain 클래스 코드를 작성 합니다.The ScriptMain item, which contains the ScriptMain class in which you write your code. ScriptMain 클래스에서 상속 된 UserComponent 클래스입니다.The ScriptMain class inherits from the UserComponent class.

  2. ComponentWrapper 포함 하는 항목이 UserComponent 클래스의 인스턴스 ScriptComponent 메서드 및 데이터를 처리 하 고 패키지와 상호 작용에 사용할 속성을 포함 하 합니다.The ComponentWrapper item, which contains the UserComponent class, an instance of ScriptComponent that contains the methods and properties that you will use to process data and to interact with the package. ComponentWrapper 항목도 포함 되어 연결변수 컬렉션 클래스입니다.The ComponentWrapper item also contains Connections and Variables collection classes.

  3. BufferWrapper 에서 상속 하는 클래스를 포함 하는 항목이 ScriptBuffer 각 열에 대 한 각 입력 및 출력, 및 형식화 된 속성에 대 한 합니다.The BufferWrapper item, which contains classes that inherits from ScriptBuffer for each input and output, and typed properties for each column.

    코드를 작성할 때는 ScriptMain 항목을 사용할지 개체, 메서드 및 속성을이 항목에서 설명 합니다.As you write your code in the ScriptMain item, you will use the objects, methods, and properties discussed in this topic. 각 구성 요소에서 여기에 나열된 메서드를 모두 사용하는 것은 아니지만 사용될 경우에는 여기에 표시된 순서대로 사용됩니다.Each component will not use all the methods listed here; however, when used, they are used in the sequence shown.

    ScriptComponent 기본 클래스에는 이 항목에 설명된 메서드의 구현 코드가 들어 있지 않습니다.The ScriptComponent base class does not contain any implementation code for the methods discussed in this topic. 따라서 메서드 구현에 기본 클래스 구현에 대한 호출을 추가하는 것은 불필요하지만 해가 되지는 않습니다.Therefore it is unnecessary, but harmless, to add a call to the base class implementation to your own implementation of the method.

    특정 유형의 스크립트 구성 요소에서 메서드 및 이러한 클래스의 속성을 사용 하는 방법에 대 한 내용은 섹션을 참조 하십시오. Additional Script Component Examples합니다.For information about how to use the methods and properties of these classes in a particular type of Script component, see the section Additional Script Component Examples. 예 항목에는 전체 코드 예제도 들어 있습니다.The example topics also contain complete code samples.

AcquireConnections 메서드AcquireConnections Method

원본 및 대상은 일반적으로 외부 데이터 원본에 연결해야 합니다.Sources and destinations generally must connect to an external data source. AcquireConnections 기본 클래스의 ScriptComponent 메서드를 재정의하여 적절한 연결 관리자에서 연결 또는 연결 정보를 검색합니다.Override the AcquireConnections method of the ScriptComponent base class to retrieve the connection or the connection information from the appropriate connection manager.

다음 예제에서는 반환 된 System.Data.SqlClient.SqlConnection ADO.NET 연결 관리자에서 합니다.The following example returns a System.Data.SqlClient.SqlConnection from an ADO.NET connection manager.

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합니다.The following example returns a complete path and file name from a Flat File Connection Manager, and then opens the file by using a 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 Method

데이터 행의 처리를 시작하기 전에만 한 번 수행해야 하는 처리가 있을 때마다 PreExecute 기본 클래스의 ScriptComponent 메서드를 재정의합니다.Override the PreExecute method of the ScriptComponent base class whenever you have processing that you must perform one time only before you start processing rows of data. 예를 들어 대상에서 데이터 원본에 각 데이터 행을 삽입하는 데 사용할 매개 변수가 있는 명령을 구성할 수 있습니다.For example, in a destination, you may want to configure the parameterized command that the destination will use to insert each row of data into the data source.

    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);   

}  

입력 및 출력 처리Processing Inputs and Outputs

입력 처리Processing Inputs

변환 또는 대상으로 구성된 스크립트 구성 요소에는 하나의 입력이 있습니다.Script components that are configured as transformations or destinations have one input.

BufferWrapper 프로젝트 항목의 제공 내용What the BufferWrapper Project Item Provides

구성 했는지, 각 입력에 대해는 BufferWrapper 에서 파생 된 클래스를 포함 하는 프로젝트 항목 ScriptBuffer 입력으로 동일한 이름을 가진 합니다.For each input that you have configured, the BufferWrapper project item contains a class that derives from ScriptBuffer and has the same name as the input. 각 입력 버퍼 클래스에는 다음과 같은 속성, 함수 및 메서드가 들어 있습니다.Each input buffer class contains the following properties, functions, and methods:

  • 선택한 각 입력 열에 대한 명명되고 형식화된 접근자 속성.Named, typed accessor properties for each selected input column. 이러한 속성은 읽기 전용 또는 읽기/쓰기에 따라는 사용 유형을 에서 열에 지정한는 입력 열 의 페이지는 스크립트 변환 편집기합니다.These properties are read-only or read/write depending on the Usage Type specified for the column on the Input Columns page of the Script Transformation Editor.

  • A <열 > _IsNull 각 속성이 선택한 입력 열입니다.A <column>_IsNull property for each selected input column. 이 속성은 또한 읽기 전용 또는 읽기/쓰기에 따라는 사용 유형을 열에 대해 지정 합니다.This property is also read-only or read/write depending on the Usage Type specified for the column.

  • A DirectRowTo<outputbuffer > 메서드 각각에 대 한 출력을 구성 합니다.A DirectRowTo<outputbuffer> method for each configured output. 행을 동일한 여러 출력 중 하나로 필터링 하는 경우에 이러한 메서드를 사용 합니다 ExclusionGroup합니다.You will use these methods when filtering rows to one of several outputs in the same ExclusionGroup.

  • A NextRow 다음 입력된 행을 가져오는 함수를 및 EndOfRowset 데이터의 마지막 버퍼가 처리 되었는지 여부를 결정 하는 함수입니다.A NextRow function to get the next input row, and an EndOfRowset function to determine whether the last buffer of data has been processed. 일반적으로 불필요 이러한 함수 입력 처리에서 구현 된 메서드를 사용 하는 경우는 UserComponent 기본 클래스입니다.You typically do not need these functions when you use the input processing methods implemented in the UserComponent base class. 다음 섹션에 대 한 자세한 정보를 제공는 UserComponent 기본 클래스입니다.The next section provides more information about the UserComponent base class.

ComponentWrapper 프로젝트 항목의 제공 내용What the ComponentWrapper Project Item Provides

ComponentWrapper 프로젝트 항목 클래스를 포함 UserComponent 에서 파생 된 ScriptComponent합니다.The ComponentWrapper project item contains a class named UserComponent that derives from ScriptComponent. ScriptMain 사용자 지정 코드를 작성 하는 클래스에서 파생 UserComponent합니다.The ScriptMain class in which you write your custom code derives in turn from UserComponent. UserComponent 클래스에는 다음과 같은 메서드가 들어 있습니다.The UserComponent class contains the following methods:

  • 재정의 된 구현을 ProcessInput 메서드.An overridden implementation of the ProcessInput method. 이 데이터 흐름는 엔진 호출 다음 런타임에 후 메서드는 PreExecute 수 여러 번 호출 될 메서드를 합니다.This is the method that the data flow engine calls next at run time after the PreExecute method, and it may be called multiple times. ProcessInput 처리를 넘깁니다는 <inputbuffer > _ProcessInput 메서드.ProcessInput hands off processing to the <inputbuffer>_ProcessInput method. 그런 다음 ProcessInput 메서드 입력된 버퍼의 끝을 확인 하 고, 버퍼의 끝에 도달한 경우 재정의 가능한 호출 FinishOutputs 메서드와 전용 MarkOutputsAsFinished 메서드.Then the ProcessInput method checks for the end of the input buffer and, if the end of the buffer has been reached, calls the overridable FinishOutputs method and the private MarkOutputsAsFinished method. MarkOutputsAsFinished 메서드를 호출 SetEndOfRowset 마지막 출력 버퍼에 있습니다.The MarkOutputsAsFinished method then calls SetEndOfRowset on the last output buffer.

  • 재정의 가능한 구현을 <inputbuffer > _ProcessInput 메서드.An overridable implementation of the <inputbuffer>_ProcessInput method. 이 기본 구현은 단순히 각 입력된 행과 호출을 반복 <inputbuffer > _ProcessInputRow합니다.This default implementation simply loops through each input row and calls <inputbuffer>_ProcessInputRow.

  • 재정의 가능한 구현을 <inputbuffer > _ProcessInputRow 메서드.An overridable implementation of the <inputbuffer>_ProcessInputRow method. 기본 구현은 비어 있습니다.The default implementation is empty. 이 메서드는 일반적으로 사용자 지정 데이터 처리 코드를 작성하기 위해 재정의하는 메서드입니다.This is the method that you will normally override to write your custom data processing code.

사용자 지정 코드로 수행하는 작업What Your Custom Code Should Do

다음 메서드를 사용 하 여에서 입력을 처리 하는 ScriptMain 클래스:You can use the following methods to process input in the ScriptMain class:

  • 재정의 <inputbuffer > _ProcessInputRow 통과할 때 각 입력된 행의 데이터를 처리할 수 있습니다.Override <inputbuffer>_ProcessInputRow to process the data in each input row as it passes through.

  • 재정의 <inputbuffer > _ProcessInput 입력된 행을 반복 하는 동안 추가 작업을 수행 해야 할 경우에 합니다.Override <inputbuffer>_ProcessInput only if you have to do something additional while looping through input rows. (에 대 한 테스트 해야 하는 예를 들어 EndOfRowset 어떤 작업도 몇 가지 다른 모든 행이 처리 된.) 호출 <inputbuffer > _ProcessInputRow 행 처리를 수행 합니다.(For example, you have to test for EndOfRowset to take some other action after all rows have been processed.) Call <inputbuffer>_ProcessInputRow to perform the row processing.

  • 재정의 FinishOutputs 닫기 전에 출력에 작업을 수행 해야 할 경우.Override FinishOutputs if you have to do something to the outputs before they are closed.

    ProcessInput 메서드를 사용 하면 적절 한 시간에 이러한 메서드를 호출 합니다.The ProcessInput method ensures that these methods are called at the appropriate times.

출력 처리Processing Outputs

원본 또는 변환으로 구성된 스크립트 구성 요소에는 하나 이상의 출력이 있습니다.Script components configured as sources or transformations have one or more outputs.

BufferWrapper 프로젝트 항목의 제공 내용What the BufferWrapper Project Item Provides

BufferWrapper 프로젝트 항목에는 사용자가 구성한 각 출력에 대해 ScriptBuffer에서 파생되며 출력과 이름이 동일한 클래스가 들어 있습니다.For each output that you have configured, the BufferWrapper project item contains a class that derives from ScriptBuffer and has the same name as the output. 각 입력 버퍼 클래스에는 다음과 같은 속성 및 메서드가 들어 있습니다.Each input buffer class contains the following properties and methods:

  • 각 출력 열에 대한 명명되고 형식화된 쓰기 전용 접근자 속성Named, typed, write-only accessor properties for each output column.

  • 쓰기 전용 <열 > _IsNull 열 값을 설정 하는 데 사용할 수 있는 각 선택한 출력 열에 대 한 속성 null합니다.A write-only <column>_IsNull property for each selected output column that you can use to set the column value to null.

  • AddRow 메서드를 비어 있는 새 행을 출력 버퍼에 추가 합니다.An AddRow method to add an empty new row to the output buffer.

  • A SetEndOfRowset 메서드 데이터 버퍼가 더 이상 예상 되는 데이터 흐름 엔진 수 있도록 합니다.A SetEndOfRowset method to let the data flow engine know that no more buffers of data are expected. 또한는 EndOfRowset 현재 버퍼가 마지막 데이터 버퍼 인지 여부를 결정 하는 함수입니다.There is also an EndOfRowset function to determine whether the current buffer is the last buffer of data. 일반적으로 불필요 이러한 함수 입력 처리에서 구현 된 메서드를 사용 하는 경우는 UserComponent 기본 클래스입니다.You generally do not need these functions when you use the input processing methods implemented in the UserComponent base class.

ComponentWrapper 프로젝트 항목의 제공 내용What the ComponentWrapper Project Item Provides

ComponentWrapper 프로젝트 항목 클래스를 포함 UserComponent 에서 파생 된 ScriptComponent합니다.The ComponentWrapper project item contains a class named UserComponent that derives from ScriptComponent. ScriptMain 사용자 지정 코드를 작성 하는 클래스에서 파생 UserComponent합니다.The ScriptMain class in which you write your custom code derives in turn from UserComponent. UserComponent 클래스에는 다음과 같은 메서드가 들어 있습니다.The UserComponent class contains the following methods:

  • 재정의 된 구현을 PrimeOutput 메서드.An overridden implementation of the PrimeOutput method. 먼저이 메서드를 호출 하는 데이터 흐름 엔진 ProcessInput 런타임 시 한 번만 호출 됩니다.The data flow engine calls this method before ProcessInput at run time, and it is only called one time. PrimeOutput 처리를 넘깁니다는 CreateNewOutputRows 메서드.PrimeOutput hands off processing to the CreateNewOutputRows method. 그런 다음 구성 요소가 원본인 경우 (즉, 구성 요소는 입력에) PrimeOutput 재정의 가능한 호출 FinishOutputs 메서드와 전용 MarkOutputsAsFinished 메서드.Then, if the component is a source (that is, the component has no inputs), PrimeOutput calls the overridable FinishOutputs method and the private MarkOutputsAsFinished method. MarkOutputsAsFinished 메서드 호출 SetEndOfRowset 마지막 출력 버퍼에 있습니다.The MarkOutputsAsFinished method calls SetEndOfRowset on the last output buffer.

  • 재정의 가능한 구현을 CreateNewOutputRows 메서드.An overridable implementation of the CreateNewOutputRows method. 기본 구현은 비어 있습니다.The default implementation is empty. 이 메서드는 일반적으로 사용자 지정 데이터 처리 코드를 작성하기 위해 재정의하는 메서드입니다.This is the method that you will normally override to write your custom data processing code.

사용자 지정 코드로 수행하는 작업What Your Custom Code Should Do

다음 메서드를 사용 하 여 출력을 처리 하는 ScriptMain 클래스:You can use the following methods to process outputs in the ScriptMain class:

  • 재정의 CreateNewOutputRows 입력된 행을 처리 하기 전에 추가 하 고 채울 수 때 출력 행에만 합니다.Override CreateNewOutputRows only when you can add and populate output rows before processing input rows. 사용할 수는 예를 들어 CreateNewOutputRows 호출 해야 소스, 있지만 비동기 출력을 사용 하는 변환에 AddRow 중 이나 후 입력된 데이터의 처리 합니다.For example, you can use CreateNewOutputRows in a source, but in a transformation with asynchronous outputs, you should call AddRow during or after the processing of input data.

  • 재정의 FinishOutputs 닫기 전에 출력에 작업을 수행 해야 할 경우.Override FinishOutputs if you have to do something to the outputs before they are closed.

    PrimeOutput 메서드를 사용 하면 적절 한 시간에 이러한 메서드를 호출 합니다.The PrimeOutput method ensures that these methods are called at the appropriate times.

PostExecute 메서드PostExecute Method

데이터 행의 처리를 시작한 후에만 한 번 수행해야 하는 처리가 있을 때마다 PostExecute 기본 클래스의 ScriptComponent 메서드를 재정의합니다.Override the PostExecute method of the ScriptComponent base class whenever you have processing that you must perform one time only after you have processed the rows of data. 예를 들어, 소스, 하려는 닫습니다는 System.Data.SqlClient.SqlDataReader 사용 데이터 흐름에 데이터를 로드 합니다.For example, in a source, you may want to close the System.Data.SqlClient.SqlDataReader that you have used to load data into the data flow.

중요

컬렉션 ReadWriteVariables 에서만 사용할 수는 PostExecute 메서드.The collection of ReadWriteVariables is available only in the PostExecute method. 따라서 각 데이터 행을 처리할 때 패키지 변수의 값을 직접 증분시킬 수 없습니다.Therefore you cannot directly increment the value of a package variable as you process each row of data. 대신 지역 변수의 값이 증가 하 고 패키지 변수의 값에 있는 지역 변수의 값으로 설정 된 PostExecute 메서드 후 모든 데이터를 처리 합니다.Instead, increment the value of a local variable, and set the value of the package variable to the value of the local variable in the PostExecute method after all data has been processed.

ReleaseConnections 메서드ReleaseConnections Method

원본과 대상은 일반적으로 외부 데이터 원본에 연결해야 합니다.Sources and destinations typically must connect to an external data source. ReleaseConnections 기본 클래스의 ScriptComponent 메서드를 재정의하여 이전에 AcquireConnections 메서드에서 연 연결을 닫고 해제합니다.Override the ReleaseConnections method of the ScriptComponent base class to close and release the connection that you have opened previously in the AcquireConnections method.

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

        connMgr.ReleaseConnection(sqlConn)  

    End Sub  
IDTSConnectionManager100 connMgr;  

public override void ReleaseConnections()  
{  

    connMgr.ReleaseConnection(sqlConn);  

}  

관련 항목:See Also

스크립트 구성 요소 편집기에서 스크립트 구성 요소 구성 Configuring the Script Component in the Script Component Editor
코딩 및 스크립트 구성 요소 디버깅Coding and Debugging the Script Component