Freigeben über


Codieren eines benutzerdefinierten Verbindungs-Managers

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.

HinweisHinweis

Die meisten Tasks, Quellen und Ziele, die in Integration Services integriert wurden, können nur mit bestimmten Typen von integrierten Verbindungs-Managern verwendet werden. Deshalb 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 Entwickeln benutzerdefinierter Objekte 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();
    }
Integration Services (kleines Symbol) Bleiben Sie mit Integration Services auf dem neuesten Stand

Die neuesten Downloads, Artikel, Beispiele und Videos von Microsoft sowie ausgewählte Lösungen aus der Community finden Sie auf MSDN auf der Integration Services-Seite:


Abonnieren Sie die auf der Seite verfügbaren RSS-Feeds, um automatische Benachrichtigungen zu diesen Updates zu erhalten.

Siehe auch

Aufgaben

Erstellen eines benutzerdefinierten Verbindungs-Managers

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