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();
}
|
Voir aussi
Tâches
Historique des modifications
Mise à jour du contenu |
---|
|