Scrittura del codice di una gestione connessione personalizzata

Si applica a:SQL Server Integration Runtime SSIS in Azure Data Factory

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.

Per esempi di gestioni connessione personalizzate, vedere Sviluppo di un'interfaccia utente per una gestione connessione personalizzata. Gli esempi di codice illustrati in questo argomento sono tratti dall'esempio di gestione connessione personalizzata SQL Server.

Nota

La maggior parte delle attività, delle origini e delle destinazioni incluse in Integration Services funziona solo con tipi specifici di gestioni connessioni predefinite. Questi esempi, pertanto, non possono essere testati con le attività e i componenti predefiniti.

Configurazione della gestione connessione

Impostazione della proprietà ConnectionString

La proprietà ConnectionString è un'importante proprietà ed è l'unica specifica di una gestione connessione personalizzata. La gestione connessione utilizza il valore di questa proprietà per connettersi all'origine dati esterna. 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. Nell'esempio di codice seguente è illustrata un'implementazione della proprietà ConnectionString che si basa su una funzione di supporto per assemblare la stringa.

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

Eseguire l'override del metodo Validate per verificare che la gestione connessione sia stata configurata correttamente e sia pronta per l'esecuzione. È necessario convalidare almeno il formato della stringa di connessione e verificare che siano stati forniti valori per tutti gli argomenti. L'esecuzione non può continuare finché la gestione connessione non restituisce Success dal metodo Validate.

Nell'esempio di codice seguente è illustrata un'implementazione di Validate che verifica che l'utente abbia specificato un nome di server per la connessione.

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 connessione

In genere non è necessario implementare la persistenza personalizzata per una gestione connessione. La persistenza personalizzata è richiesta solo quando le proprietà di un oggetto utilizzano tipi di dati complessi. Per altre informazioni, vedere Sviluppo di oggetti personalizzati per Integration Services.

Utilizzo dell'origine dati esterna

I metodi più importanti di una gestione connessione personalizzata sono quelli che supportano la connessione a un'origine dati esterna. I metodi AcquireConnection e ReleaseConnection vengono chiamati in vari momenti durante la fase di progettazione e la fase di esecuzione.

Acquisizione della connessione

È necessario stabilire il tipo di oggetto appropriato che il metodo AcquireConnection deve restituire dalla gestione connessione personalizzata. 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. Una gestione connessione OLE DB restituisce un oggetto connessione OLE DB nativo che non può essere utilizzato da codice gestito. La gestione connessione SQL Server personalizzata, da cui sono tratti i frammenti di codice inclusi in questo argomento, restituisce un oggetto SqlConnection aperto.

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à.

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 connessione

L'azione eseguita nel metodo ReleaseConnection dipende dal tipo di oggetto restituito dal metodo AcquireConnection. Se è disponibile un oggetto connessione aperto, è necessario chiuderlo e rilasciare le eventuali risorse che utilizza. Se AcquireConnection ha restituito solo un valore stringa, non è necessario eseguire alcuna azione.

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 anche

Creazione di una gestione connessione personalizzata
Sviluppo di un'interfaccia utente per una gestione connessione personalizzata