사용자 지정 연결 관리자 코딩Coding a Custom Connection Manager

ConnectionManagerBase 기본 클래스에서 상속된 클래스를 만들고 이 클래스에 DtsConnectionAttribute 특성을 적용한 후에는 기본 클래스의 속성 및 메서드 구현을 재정의하여 사용자 지정 기능을 제공해야 합니다.After you have created a class that inherits from the ConnectionManagerBase base class, and applied the DtsConnectionAttribute attribute to the class, you must override the implementation of the properties and methods of the base class to provide your custom functionality.

에 대 한 사용자 지정 연결 관리자 예제를 참조 하세요. 사용자 인터페이스 사용자 지정 연결 관리자에 대 한 개발합니다.For samples of custom connection managers, see Developing a User Interface for a Custom Connection Manager. 이 항목에 표시된 코드 예는 SQL Server 사용자 지정 연결 관리자 예제에서 가져온 것입니다.The code examples shown in this topic are drawn from the SQL Server Custom Connection Manager sample.

참고

Integration ServicesIntegration Services에 기본 제공된 대부분의 태스크, 원본 및 대상은 특정 유형의 기본 제공 연결 관리자와만 사용할 수 있습니다.Most of the tasks, sources, and destinations that have been built into Integration ServicesIntegration Services work only with specific types of built-in connection managers. 따라서 이러한 예제를 기본 제공 태스크 및 구성 요소와 함께 테스트할 수 없습니다.Therefore, these samples cannot be tested with the built-in tasks and components.

연결 관리자 구성Configuring the Connection Manager

ConnectionString 속성 설정Setting the ConnectionString Property

ConnectionString 속성은 중요한 속성으로서, 사용자 지정 연결 관리자에 고유한 유일한 속성입니다.The ConnectionString property is an important property and the only property unique to a custom connection manager. 연결 관리자는 이 속성 값을 사용하여 외부 데이터 원본에 연결합니다.The connection manager uses the value of this property to connect to the external data source. 서버 이름 및 데이터베이스 이름 등의 다른 여러 속성을 조합하여 연결 문자열을 만들 경우 도우미 함수로 연결 문자열 템플릿의 일부 값을 사용자가 지정한 새 값으로 바꿔 문자열을 조합할 수 있습니다.If you are combining several other properties, such as server name and database name, to create the connection string, you can use a helper function to assemble the string by replacing certain values in a connection string template with the new value supplied by the user. 다음 코드 예에서는 도우미 함수를 사용하여 문자열을 조합하는 ConnectionString 속성의 구현을 보여 줍니다.The following code example shows an implementation of the ConnectionString property that relies on a helper function to assemble the string.

' Default values.  
Private _serverName As String = "(local)"  
Private _databaseName As String = "AdventureWorks"  
Private _connectionString As String = String.Empty  

Private Const CONNECTIONSTRING_TEMPLATE As String = _  
  "Data Source=<servername>;Initial Catalog=<databasename>;Integrated Security=SSPI"  

Public Property ServerName() As String  
  Get  
    Return _serverName  
  End Get  
  Set(ByVal value As String)  
    _serverName = value  
  End Set  
End Property  

Public Property DatabaseName() As String  
  Get  
    Return _databaseName  
  End Get  
  Set(ByVal value As String)  
    _databaseName = value  
  End Set  
End Property  

Public Overrides Property ConnectionString() As String  
  Get  
    UpdateConnectionString()  
    Return _connectionString  
  End Get  
  Set(ByVal value As String)  
    _connectionString = value  
  End Set  
End Property  

Private Sub UpdateConnectionString()  

  Dim temporaryString As String = CONNECTIONSTRING_TEMPLATE  

  If Not String.IsNullOrEmpty(_serverName) Then  
    temporaryString = temporaryString.Replace("<servername>", _serverName)  
  End If  
  If Not String.IsNullOrEmpty(_databaseName) Then  
    temporaryString = temporaryString.Replace("<databasename>", _databaseName)  
  End If  

  _connectionString = temporaryString  

End Sub  
// Default values.  
private string _serverName = "(local)";  
private string _databaseName = "AdventureWorks";  
private string _connectionString = String.Empty;  

private const string CONNECTIONSTRING_TEMPLATE = "Data Source=<servername>;Initial Catalog=<databasename>;Integrated Security=SSPI";  

public string ServerName  
{  
  get  
  {  
    return _serverName;  
  }  
  set  
  {  
    _serverName = value;  
  }  
}  

public string DatabaseName  
{  
  get  
  {  
    return _databaseName;  
  }  
  set  
  {  
    _databaseName = value;  
  }  
}  

public override string ConnectionString  
{  
  get  
  {  
    UpdateConnectionString();  
    return _connectionString;  
  }  
  set  
  {  
    _connectionString = value;  
  }  
}  

private void UpdateConnectionString()  
{  

  string temporaryString = CONNECTIONSTRING_TEMPLATE;  

  if (!String.IsNullOrEmpty(_serverName))  
  {  
    temporaryString = temporaryString.Replace("<servername>", _serverName);  
  }  

  if (!String.IsNullOrEmpty(_databaseName))  
  {  
    temporaryString = temporaryString.Replace("<databasename>", _databaseName);  
  }  

  _connectionString = temporaryString;  

}  

연결 관리자 유효성 검사Validating the Connection Manager

Validate 메서드를 재정의하여 연결 관리자가 올바르게 구성되어 있는지 확인할 수 있습니다.You override the Validate method to make sure that the connection manager has been configured correctly. 최소한 연결 문자열 형식의 유효성을 검사하고 모든 인수에 값이 지정되었는지 확인해야 합니다.At a minimum, you should validate the format of the connection string and make sure that values have been provided for all arguments. 연결 관리자가 Success 메서드에서 Validate를 반환하기 전까지는 실행을 계속할 수 없습니다.Execution cannot continue until the connection manager returns Success from the Validate method.

다음 코드 예에서는 사용자가 연결의 서버 이름을 지정했는지 확인하는 Validate의 구현을 보여 줍니다.The following code example shows an implementation of Validate that makes sure that the user has specified a server name for the connection.

Public Overrides Function Validate(ByVal infoEvents As Microsoft.SqlServer.Dts.Runtime.IDTSInfoEvents) As Microsoft.SqlServer.Dts.Runtime.DTSExecResult  

  If String.IsNullOrEmpty(_serverName) Then  
    infoEvents.FireError(0, "SqlConnectionManager", "No server name specified", String.Empty, 0)  
    Return DTSExecResult.Failure  
  Else  
    Return DTSExecResult.Success  
  End If  

End Function  
public override Microsoft.SqlServer.Dts.Runtime.DTSExecResult Validate(Microsoft.SqlServer.Dts.Runtime.IDTSInfoEvents infoEvents)  
{  

  if (String.IsNullOrEmpty(_serverName))  
  {  
    infoEvents.FireError(0, "SqlConnectionManager", "No server name specified", String.Empty, 0);  
    return DTSExecResult.Failure;  
  }  
  else  
  {  
    return DTSExecResult.Success;  
  }  

}  

연결 관리자 지속Persisting the Connection Manager

일반적으로 연결 관리자의 사용자 지정 지속성은 구현할 필요가 없습니다.Usually, you do not have to implement custom persistence for a connection manager. 사용자 지정 지속성은 개체의 속성이 복합 데이터 형식을 사용할 때만 필요합니다.Custom persistence is required only when the properties of an object use complex data types. 자세한 내용은 참조 Integration Services에 대 한 사용자 지정 개체 개발합니다.For more information, see Developing Custom Objects for Integration Services.

외부 데이터 원본 작업Working with the External Data Source

외부 데이터 원본에 대한 연결을 지원하는 메서드는 사용자 지정 연결 관리자의 중요한 메서드입니다.The methods that support connecting to an external data source are the most important methods of a custom connection manager. AcquireConnectionReleaseConnection 메서드는 디자인 타임과 런타임에 호출됩니다.The AcquireConnection and ReleaseConnection methods are called at various times during both design time and run time.

연결 설정Acquiring the Connection

AcquireConnection 메서드가 사용자 지정 연결 관리자에서 반환하는 데 적절한 개체 유형을 결정해야 합니다.You need to decide what type of object it is appropriate for the AcquireConnection method to return from your custom connection manager. 예를 들어 파일 연결 관리자는 경로 및 파일 이름이 들어 있는 문자열만 반환하는 반면에 ADO.NET 연결 관리자는 이미 열려 있는 관리되는 연결 개체를 반환합니다.For example, a File connection manager returns only a string that contains a path and filename, whereas an ADO.NET connection manager returns a managed connection object that is already open. 또한 OLE DB 연결 관리자는 관리 코드에서 사용할 수 없는 네이티브 OLE DB 연결 개체를 반환하고,An OLE DB connection manager returns a native OLE DB connection object that cannot be used from managed code. 이 항목의 코드 조각 수행 되는 사용자 지정 SQL Server 연결 관리자에서 열린 반환 SqlConnection 개체입니다.The custom SQL Server connection manager, from which the code snippets in this topic are taken, returns an open SqlConnection object.

연결 관리자의 사용자는 반환된 개체를 적절한 유형으로 캐스팅하고 해당 메서드 및 속성에 액세스할 수 있도록 예상되는 개체 유형을 미리 알고 있어야 합니다.Users of your connection manager need to know in advance what type of object to expect, so that they can cast the returned object to the appropriate type and access its methods and properties.

Public Overrides Function AcquireConnection(ByVal txn As Object) As Object  

  Dim sqlConnection As New SqlConnection  

  UpdateConnectionString()  

  With sqlConnection  
    .ConnectionString = _connectionString  
    .Open()  
  End With  

  Return sqlConnection  

End Function  
public override object AcquireConnection(object txn)  
{  

  SqlConnection sqlConnection = new SqlConnection();  

  UpdateConnectionString();  

  {  
    sqlConnection.ConnectionString = _connectionString;  
    sqlConnection.Open();  
  }  

  return sqlConnection;  

}  

연결 해제Releasing the Connection

ReleaseConnection 메서드에서 수행하는 동작은 AcquireConnection 메서드에서 반환된 개체의 유형에 따라 달라집니다.The action that you take in the ReleaseConnection method depends on the type of object that you returned from the AcquireConnection method. 열려 있는 연결 개체가 있는 경우 해당 연결 개체를 닫고 이 개체에서 사용 중인 리소스를 해제해야 합니다.If there is an open connection object, you should close it and to release any resources that it is using. AcquireConnection이 문자열 값만 반환한 경우에는 아무 동작도 수행할 필요가 없습니다.If AcquireConnection returned only a string value, no action needs to be taken.

Public Overrides Sub ReleaseConnection(ByVal connection As Object)  

  Dim sqlConnection As SqlConnection  

  sqlConnection = DirectCast(connection, SqlConnection)  

  If sqlConnection.State <> ConnectionState.Closed Then  
    sqlConnection.Close()  
  End If  

End Sub  
public override void ReleaseConnection(object connection)  
{  
  SqlConnection sqlConnection;  
  sqlConnection = (SqlConnection)connection;  
  if (sqlConnection.State != ConnectionState.Closed)  
    sqlConnection.Close();  
}  

참고 항목See Also

사용자 지정 연결 관리자 만들기 Creating a Custom Connection Manager
사용자 지정 연결 관리자에 대 한 사용자 인터페이스 개발Developing a User Interface for a Custom Connection Manager