Freigeben über


Codieren eines benutzerdefinierten Verbindungs-Managers

Gilt für: SQL Server SSIS Integration Runtime in Azure Data Factory

Nachdem Sie eine Klasse erstellt haben, die von der ConnectionManagerBase-Basisklasse erbt, und das DtsConnectionAttribute-Attribut auf die Klasse angewendet haben, müssen Sie die Implementierung der Eigenschaften und Methoden der Basisklasse überschreiben, um die benutzerdefinierte Funktionalität bereitzustellen.

Beispiele für benutzerdefinierte Verbindungs-Manager finden Sie unter Entwickeln einer Benutzeroberfläche für einen benutzerdefinierten Verbindungs-Manager. Die in diesem Thema dargestellten Codebeispiele stammen aus dem SQL Server Custom Connection Manager-Beispiel.

Hinweis

Die meisten Tasks, Quellen und Ziele, die in Integration Services integriert wurden, können nur mit bestimmten Typen integrierter Verbindungs-Manager verwendet werden. Daher können diese Beispiele nicht mit den integrierten Tasks und Komponenten getestet werden.

Konfigurieren des Verbindungs-Managers

Festlegen der ConnectionString-Eigenschaft

Die ConnectionString-Eigenschaft ist eine wichtige Eigenschaft und die einzige für einen benutzerdefinierten Verbindungs-Manager eindeutige Eigenschaft. Der Verbindungs-Manager verwendet den Wert dieser Eigenschaft, um eine Verbindung zur externen Datenquelle herzustellen. Wenn Sie mehrere andere Eigenschaften miteinander kombinieren, z. B. Servername und Datenbankname, um die Verbindungszeichenfolge zu erstellen, können Sie mit einer Hilfsfunktion die Zeichenfolge zusammenstellen, indem Sie bestimmte Werte in einer Verbindungszeichenfolgenvorlage durch den neuen vom Benutzer bereitgestellten Wert ersetzen. Im folgenden Beispiel wird eine Implementierung der ConnectionString-Eigenschaft dargestellt, die zum Zusammenstellen der Zeichenfolge eine Hilfsfunktion benötigt.

' 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;  
  
}  

Überprüfen des Verbindungs-Managers

Sie überschreiben die Validate-Methode, um sicherzustellen, dass der Verbindungs-Manager ordnungsgemäß konfiguriert wurde. Sie sollten zumindest das Format der Verbindungszeichenfolge überprüfen und sicherstellen, dass die Werte für alle Argumente angegeben wurden. Die Ausführung kann nicht fortgesetzt werden, bis der Verbindungs-Manager Success von der Validate-Methode zurückgibt.

Im folgenden Codebeispiel wird eine Implementierung von Validate gezeigt, mit der sichergestellt wird, dass der Benutzer den Servernamen für die Verbindung angegeben hat.

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

Beibehalten des Verbindungs-Managers

In der Regel müssen Sie keine benutzerdefinierte Persistenz für einen Verbindungs-Manager implementieren. Die benutzerdefinierte Persistenz ist nur erforderlich, wenn die Eigenschaften eines Objekts komplexe Datentypen verwenden. Weitere Informationen finden Sie unter Developing Custom Objects for Integration Services (Entwickeln von benutzerdefinierten Objekten für Integration Services).

Arbeiten mit der externen Datenquelle

Die Methoden, die eine Verbindung zu einer externen Datenquelle unterstützen, sind die wichtigsten Methoden eines benutzerdefinierten Verbindungs-Managers. Die AcquireConnection-Methode und die ReleaseConnection-Methode werden zu unterschiedlichen Zeitpunkten während des Entwurfs und der Ausführung aufgerufen.

Abrufen der Verbindung

Sie müssen entscheiden, welcher Objekttyp für die AcquireConnection-Methode geeignet ist, um vom benutzerdefinierten Verbindungs-Manager zurückgegeben zu werden. Ein Dateiverbindungs-Manager gibt beispielsweise nur eine Zeichenfolge zurück, die einen Pfad und einen Dateinamen enthält, ein ADO.NET-Verbindungs-Manager gibt hingegen ein verwaltetes Verbindungsobjekt, das bereits offen ist, zurück. Ein OLE DB-Verbindungs-Manager gibt ein systemeigenes OLE DB-Verbindungsobjekt zurück, das nicht vom verwalteten Code verwendet werden kann. Der benutzerdefinerte SQL Server-Verbindungs-Manager, dem die Codeabschnitte in diesem Themen entnommen wurden, gibt ein offenes SqlConnection-Objekt zurück.

Benutzer Ihres Verbindungs-Managers müssen vorab wissen, welche Objekttypen verwendet werden, sodass sie das zurückgegebene Objekt in den entsprechenden Typ umwandeln können und auf dessen Methoden und Eigenschaften zugreifen können.

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

Freigeben der Verbindung

Die auszuführende Aktion für die ReleaseConnection-Methode ist vom Objekttyp, der mit der AcquireConnection-Methode zurückgegeben wird, abhängig. Wenn ein offenes Verbindungsobjekt vorliegt, sollten Sie es schließen, um von ihm verwendete Ressourcen freizugeben. Wenn AcquireConnection nur einen Zeichenfolgenwert zurückgegeben hat, muss keine Aktion ausgeführt werden.

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

Weitere Informationen

Erstellen eines benutzerdefinierten Verbindungs-Managers
Entwickeln einer Benutzeroberfläche für einen benutzerdefinierten Verbindungs-Manager