Scrittura del codice di una gestione connessione personalizzataCoding a Custom Connection Manager

Dopo avere creato una classe che eredita dalla classe di base ConnectionManagerBase e avere applicato l'attributo DtsConnectionAttribute alla classe, è necessario eseguire l'override dell'implementazione delle proprietà e dei metodi della classe di base per fornire la funzionalità personalizzata.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.

Per esempi di gestioni connessioni personalizzate, vedere lo sviluppo di un'interfaccia utente per una gestione connessione personalizzata.For samples of custom connection managers, see Developing a User Interface for a Custom Connection Manager. Gli esempi di codice illustrati in questo argomento sono tratti dall'esempio di gestione connessione personalizzata SQL Server.The code examples shown in this topic are drawn from the SQL Server Custom Connection Manager sample.

Nota

La maggior parte delle attività, delle origini e delle destinazioni incluse in Integration ServicesIntegration Services funziona solo con tipi specifici di gestioni connessioni predefinite.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. Questi esempi, pertanto, non possono essere testati con le attività e i componenti predefiniti.Therefore, these samples cannot be tested with the built-in tasks and components.

Configurazione della gestione connessioneConfiguring the Connection Manager

Impostazione della proprietà ConnectionString Setting the ConnectionString Property

La proprietà ConnectionString è un'importante proprietà ed è l'unica specifica di una gestione connessione personalizzata.The ConnectionString property is an important property and the only property unique to a custom connection manager. La gestione connessione utilizza il valore di questa proprietà per connettersi all'origine dati esterna.The connection manager uses the value of this property to connect to the external data source. Se si combinano diverse altre proprietà, ad esempio il nome del server e il nome del database, per creare la stringa di connessione, è possibile utilizzare una funzione di supporto per assemblare la stringa sostituendo determinati valori in un modello di stringa di connessione con il nuovo valore fornito dall'utente.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. Nell'esempio di codice seguente è illustrata un'implementazione della proprietà ConnectionString che si basa su una funzione di supporto per assemblare la stringa.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;  

}  

Convalida della gestione connessioneValidating the Connection Manager

Eseguire l'override del metodo Validate per verificare che la gestione connessione sia stata configurata correttamente e sia pronta per l'esecuzione.You override the Validate method to make sure that the connection manager has been configured correctly. È necessario convalidare almeno il formato della stringa di connessione e verificare che siano stati forniti valori per tutti gli argomenti.At a minimum, you should validate the format of the connection string and make sure that values have been provided for all arguments. L'esecuzione non può continuare finché la gestione connessione non restituisce Success dal metodo Validate.Execution cannot continue until the connection manager returns Success from the Validate method.

Nell'esempio di codice seguente è illustrata un'implementazione di Validate che verifica che l'utente abbia specificato un nome di server per la connessione.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;  
  }  

}  

Persistenza della gestione connessionePersisting the Connection Manager

In genere non è necessario implementare la persistenza personalizzata per una gestione connessione.Usually, you do not have to implement custom persistence for a connection manager. La persistenza personalizzata è richiesta solo quando le proprietà di un oggetto utilizzano tipi di dati complessi.Custom persistence is required only when the properties of an object use complex data types. Per ulteriori informazioni, vedere lo sviluppo di oggetti personalizzati per Integration Services.For more information, see Developing Custom Objects for Integration Services.

Utilizzo dell'origine dati esternaWorking with the External Data Source

I metodi più importanti di una gestione connessione personalizzata sono quelli che supportano la connessione a un'origine dati esterna.The methods that support connecting to an external data source are the most important methods of a custom connection manager. I metodi AcquireConnection e ReleaseConnection vengono chiamati in vari momenti durante la fase di progettazione e la fase di esecuzione.The AcquireConnection and ReleaseConnection methods are called at various times during both design time and run time.

Acquisizione della connessioneAcquiring the Connection

È necessario stabilire il tipo di oggetto appropriato che il metodo AcquireConnection deve restituire dalla gestione connessione personalizzata.You need to decide what type of object it is appropriate for the AcquireConnection method to return from your custom connection manager. Ad esempio, una gestione connessione file restituisce solo una stringa che contiene un percorso e un nome file, mentre una gestione connessione ADO.NET restituisce un oggetto connessione gestito che già è aperto.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. Una gestione connessione OLE DB restituisce un oggetto connessione OLE DB nativo che non può essere utilizzato da codice gestito.An OLE DB connection manager returns a native OLE DB connection object that cannot be used from managed code. La gestione di connessione personalizzata SQL Server, da cui provengono i frammenti di codice in questo argomento, restituisce un oggetto aperto SqlConnection oggetto.The custom SQL Server connection manager, from which the code snippets in this topic are taken, returns an open SqlConnection object.

Gli utenti della gestione connessione devono sapere in anticipo quale tipo di oggetto aspettarsi, in modo che possano eseguire il cast dell'oggetto restituito nel tipo appropriato e accedere ai relativi metodi e proprietà.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;  

}  

Rilascio della connessioneReleasing the Connection

L'azione eseguita nel metodo ReleaseConnection dipende dal tipo di oggetto restituito dal metodo AcquireConnection.The action that you take in the ReleaseConnection method depends on the type of object that you returned from the AcquireConnection method. Se è disponibile un oggetto connessione aperto, è necessario chiuderlo e rilasciare le eventuali risorse che utilizza.If there is an open connection object, you should close it and to release any resources that it is using. Se AcquireConnection ha restituito solo un valore stringa, non è necessario eseguire alcuna azione.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();  
}  

Vedere ancheSee Also

Creazione di una gestione connessione personalizzata Creating a Custom Connection Manager
Sviluppo di un'interfaccia utente per una gestione connessione personalizzataDeveloping a User Interface for a Custom Connection Manager