사용자 지정 태스크에서 데이터 원본에 연결
적용 대상: Azure Data Factory의 SQL Server SSIS Integration Runtime
작업은 연결 관리자를 사용하여 데이터를 검색하거나 저장하기 위해 외부 데이터 원본에 연결합니다. 디자인 타임에 연결 관리자는 논리적 연결을 나타내며 서버 이름 및 인증 속성과 같은 주요 정보를 설명합니다. 런타임에 태스크는 연결 관리자의 메서드를 호출 AcquireConnection 하여 데이터 원본에 대한 물리적 연결을 설정합니다.
패키지에는 각각 다른 데이터 원본에 대한 연결이 있을 수 있는 많은 태스크가 포함될 수 있으므로 패키지는 컬렉션의 모든 연결 관리자인 Connections 컬렉션을 추적합니다. 태스크에서는 해당 패키지의 컬렉션을 사용하여 유효성 검사 및 실행 중 사용할 연결 관리자를 찾습니다. Connections 컬렉션은 Validate 및 Execute 메서드에 대한 첫 번째 매개 변수입니다.
그래픽 사용자 인터페이스의 대화 상자 또는 드롭다운 목록을 사용하여 컬렉션의 개체를 사용자에게 표시 ConnectionManager 하여 작업이 잘못된 연결 관리자를 사용하지 못하도록 할 수 있습니다. 이렇게 하면 사용자는 패키지에 포함된 적절한 유형의 ConnectionManager 개체 중에서만 선택할 수 있습니다.
태스크는 메서드를 AcquireConnection 호출하여 데이터 원본에 대한 물리적 연결을 설정합니다. 이 메서드는 작업에서 사용할 수 있는 기본 연결 개체를 반환합니다. 연결 관리자는 기본 연결 개체의 구현 세부 사항을 태스크에서 격리하므로 태스크에서는 AcquireConnection 메서드를 호출하여 연결을 설정하기만 하면 되고 연결의 다른 측면은 고려할 필요가 없습니다.
예시
다음 샘플 코드는 Validate 및 Execute 메서드의 ConnectionManager 이름 유효성 검사를 보여 줍니다. 이 메서드를 사용하여 AcquireConnection Execute 메서드에서 실제 연결을 설정하는 방법을 보여 줍니다.
private string connectionManagerName = "";
public string ConnectionManagerName
{
get { return this.connectionManagerName; }
set { this.connectionManagerName = value; }
}
public override DTSExecResult Validate(
Connections connections, VariableDispenser variableDispenser,
IDTSComponentEvents componentEvents, IDTSLogging log)
{
// If the connection manager exists, validation is successful;
// otherwise, fail validation.
try
{
ConnectionManager cm = connections[this.connectionManagerName];
return DTSExecResult.Success;
}
catch (System.Exception e)
{
componentEvents.FireError(0, "SampleTask", "Invalid connection manager.", "", 0);
return DTSExecResult.Failure;
}
}
public override DTSExecResult Execute(Connections connections,
VariableDispenser variableDispenser, IDTSComponentEvents componentEvents,
IDTSLogging log, object transaction)
{
try
{
ConnectionManager cm = connections[this.connectionManagerName];
object connection = cm.AcquireConnection(transaction);
return DTSExecResult.Success;
}
catch (System.Exception exception)
{
componentEvents.FireError(0, "SampleTask", exception.Message, "", 0);
return DTSExecResult.Failure;
}
}
Private _connectionManagerName As String = ""
Public Property ConnectionManagerName() As String
Get
Return Me._connectionManagerName
End Get
Set(ByVal Value As String)
Me._connectionManagerName = value
End Set
End Property
Public Overrides Function Validate( _
ByVal connections As Microsoft.SqlServer.Dts.Runtime.Connections, _
ByVal variableDispenser As Microsoft.SqlServer.Dts.Runtime.VariableDispenser, _
ByVal componentEvents As Microsoft.SqlServer.Dts.Runtime.IDTSComponentEvents, _
ByVal log As Microsoft.SqlServer.Dts.Runtime.IDTSLogging) _
As Microsoft.SqlServer.Dts.Runtime.DTSExecResult
' If the connection manager exists, validation is successful;
' otherwise fail validation.
Try
Dim cm As ConnectionManager = connections(Me._connectionManagerName)
Return DTSExecResult.Success
Catch e As System.Exception
componentEvents.FireError(0, "SampleTask", "Invalid connection manager.", "", 0)
Return DTSExecResult.Failure
End Try
End Function
Public Overrides Function Execute( _
ByVal connections As Microsoft.SqlServer.Dts.Runtime.Connections, _
ByVal variableDispenser As Microsoft.SqlServer.Dts.Runtime.VariableDispenser, _
ByVal componentEvents As Microsoft.SqlServer.Dts.Runtime.IDTSComponentEvents, _
ByVal log As Microsoft.SqlServer.Dts.Runtime.IDTSLogging, ByVal transaction As Object) _
As Microsoft.SqlServer.Dts.Runtime.DTSExecResult
Try
Dim cm As ConnectionManager = connections(Me._connectionManagerName)
Dim connection As Object = cm.AcquireConnection(transaction)
Return DTSExecResult.Success
Catch exception As System.Exception
componentEvents.FireError(0, "SampleTask", exception.Message, "", 0)
Return DTSExecResult.Failure
End Try
End Function