Partager via


Codage d'un gestionnaire de connexions personnalisé

Après avoir créé une classe qui hérite de la classe de base ConnectionManagerBase, puis appliqué l'attribut DtsConnectionAttribute à cette classe, vous devez remplacer l'implémentation des propriétés et méthodes de la classe de base afin de fournir vos fonctionnalités personnalisées.

Pour obtenir des exemples de gestionnaires de connexions personnalisés, consultez les exemples Integration Services sur Codeplex. Les exemples de code présentés dans cette rubrique sont tirés de l'exemple de gestionnaire de connexions personnalisé SQL Server.

[!REMARQUE]

Une grande partie des tâches, sources et destinations intégrées à Integration Services utilisent uniquement des types spécifiques de gestionnaires de connexions intégrés. Par conséquent, ces exemples ne peuvent pas être testés avec les tâches et composants intégrés.

Configuration du gestionnaire de connexions

Définition de la propriété ConnectionString

La propriété ConnectionString est une propriété importante et la seule propriété propre à un gestionnaire de connexions personnalisé. Le gestionnaire de connexions utilise la valeur de cette propriété pour se connecter à la source de données externe. Si vous combinez plusieurs autres propriétés, telles que le nom du serveur et le nom de la base de données, pour créer la chaîne de connexion, vous pouvez utiliser une fonction d'assistance pour assembler la chaîne en remplaçant certaines valeurs dans un modèle de chaîne de connexion par la nouvelle valeur fournie par l'utilisateur. L'exemple de code suivant présente une implémentation de la propriété ConnectionString qui compte sur une fonction d'assistance pour assembler la chaîne.

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

    }

Validation du gestionnaire de connexions

Vous remplacez la méthode Validate pour vous assurer que le gestionnaire de connexions a été configuré correctement. Au minimum, vous devez valider le format de la chaîne de connexion et vous assurer que les valeurs ont été fournies pour tous les arguments. L'exécution ne peut pas se poursuivre tant que le gestionnaire de connexions ne renvoie pas Success à partir de la méthode Validate.

L'exemple de code suivant présente une implémentation de la méthode Validate qui permet de s'assurer que l'utilisateur a spécifié un nom de serveur pour la connexion.

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

    }

Persistance du gestionnaire de connexions

En général, vous n'avez pas à implémenter de persistance personnalisée pour un gestionnaire de connexions. Une persistance personnalisée est uniquement requise lorsque les propriétés d'un objet utilisent des types de données complexes. Pour plus d'informations, consultez Développement d'objets personnalisés pour Integration Services.

Utilisation de la source de données externe

Les méthodes qui prennent en charge la connexion à une source de données externe sont les méthodes les plus importantes d'un gestionnaire de connexions personnalisé. Les méthodes AcquireConnection et ReleaseConnection sont appelées à différents instants à la fois au moment de la conception et au moment de l'exécution.

Acquisition de la connexion

Vous devez déterminer quel type d'objet il convient que la méthode AcquireConnection renvoie à partir de votre gestionnaire de connexions personnalisé. Par exemple, un gestionnaire de connexions de fichiers renvoie uniquement une chaîne qui contient un chemin d'accès et un nom de fichier, alors qu'un gestionnaire de connexions ADO.NET renvoie un objet de connexion managée qui est déjà ouvert. Un gestionnaire de connexions OLE DB renvoie un objet de connexion OLE DB natif qui ne peut pas être utilisé à partir de code managé. Le gestionnaire de connexions SQL Server personnalisé, duquel les extraits de code de cette rubrique proviennent, renvoie un objet SqlConnection ouvert.

Les utilisateurs de votre gestionnaire de connexions ont besoin de savoir à l'avance quel type d'objet attendre, afin de pouvoir convertir l'objet retourné en type approprié et d'accéder à ses méthodes et propriétés.

  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;

    }

Libération de la connexion

La mesure que vous prenez dans la méthode ReleaseConnection dépend du type d'objet que vous avez retourné de la méthode AcquireConnection. S'il existe un objet de connexion ouvert, vous devez le fermer et libérer toutes les ressources qu'il utilise. Si la méthode AcquireConnection a retourné uniquement une valeur de chaîne, aucune action ne doit être entreprise.

  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();
    }
Icône Integration Services (petite) Rester à jour avec Integration Services

Pour obtenir les derniers téléchargements, articles, exemples et vidéos de Microsoft, ainsi que des solutions sélectionnées par la communauté, visitez la page Integration Services sur MSDN ou TechNet :

Pour recevoir une notification automatique de ces mises à jour, abonnez-vous aux flux RSS disponibles sur la page.

Historique des modifications

Mise à jour du contenu

  • Ajout d'une note expliquant la raison pour laquelle les exemples personnalisés ne peuvent pas être testés avec les tâches et composants intégrés dans Integration Services.