Condividi tramite


Creazione di una destinazione ODBC con il componente script

In SQL Server Integration Services, i dati vengono in genere salvati in una destinazione ODBC tramite una destinazione ADO.NET e il provider di dati .NET Framework per ODBC. È possibile, tuttavia, creare anche una destinazione ODBC ad hoc da utilizzare in un solo pacchetto. Per creare questa destinazione ODBC ad hoc, si utilizza il componente script come illustrato nell'esempio seguente.

Nota

Se si desidera creare un componente da riutilizzare più facilmente con più attività Flusso di dati e più pacchetti, è possibile utilizzare il codice di questo esempio di componente script come punto iniziale per un componente del flusso di dati personalizzato. Per ulteriori informazioni, vedere Sviluppo di un componente del flusso di dati personalizzato.

Esempio

Nell'esempio seguente viene illustrato come creare un componente di destinazione che utilizza una gestione connessione ODBC esistente per salvare i dati del flusso di dati in una tabella di Microsoft SQL Server.

Questo esempio è una versione modificata della destinazione ADO.NET personalizzata dimostrata nell'argomento Creazione di una destinazione con il componente script. In questo esempio, tuttavia, la destinazione ADO.NET personalizzata è stata modificata per l'utilizzo di una gestione connessione ODBC e il salvataggio dei dati in una destinazione ODBC. Queste modifiche includono anche le seguenti:

  • Non è possibile chiamare il metodo AcquireConnection della gestione connessione ODBC dal codice gestito, perché restituisce un oggetto nativo. In questo esempio viene pertanto utilizzata la stringa di connessione della gestione connessione per connettersi direttamente all'origine dati tramite il provider di dati .NET Framework ODBC gestito.

  • Per l'oggetto OdbcCommand sono previsti parametri posizionali. Le posizioni dei parametri sono indicate dai punti interrogativi (?) nel testo del comando. Al contrario, per un SqlCommand sono previsti parametri denominati.

In questo esempio viene utilizzata la tabella Person.Address nel database di esempio AdventureWorks2008R2. Nell'esempio vengono passate la prima e la quarta colonna, ovvero le colonne int AddressID e nvarchar(30) City, di questa tabella tramite il flusso di dati. Questi stessi dati vengono utilizzati negli esempi di origine, trasformazione e destinazione dell'argomento Sviluppo di tipi specifici di componenti script.

Per configurare l'esempio di componente script

  1. Creare una gestione connessione ODBC che si connette al database AdventureWorks2008R2.

  2. Creare una tabella di destinazione eseguendo il comando Transact-SQL seguente nel database AdventureWorks2008R2:

    CREATE TABLE [Person].[Address2](
        [AddressID] [int] NOT NULL,
        [City] [nvarchar](30) NOT NULL
    )
    
  3. Aggiungere un nuovo componente script all'area di progettazione del flusso di dati e configurarlo come destinazione.

  4. Connettere l'output di un'origine o di una trasformazione a monte al componente di destinazione in Progettazione SSIS. È possibile connettere direttamente un'origine a una destinazione senza alcuna trasformazione. Per assicurarsi che questo esempio funzioni, l'output del componente a monte deve includere almeno le colonne AddressID e City della tabella Person.Address del database di esempio AdventureWorks2008R2.

  5. Aprire Editor trasformazione Script. Nella pagina Colonne di input selezionare le colonne AddressID e City.

  6. Nella pagina Input e output rinominare l'input con un nome più descrittivo, ad esempio MyAddressInput.

  7. Nella pagina Gestioni connessioni aggiungere o creare la gestione connessione ODBC con un nome descrittivo, ad esempio MyODBCConnectionManager.

  8. Nella pagina Script fare clic su Modifica script, quindi immettere lo script seguente nella classe ScriptMain.

  9. Chiudere l'ambiente di sviluppo dello script e Editor trasformazione Script, quindi eseguire l'esempio.

    Imports System.Data.Odbc
    ...
    Public Class ScriptMain
        Inherits UserComponent
    
        Dim odbcConn As OdbcConnection
        Dim odbcCmd As OdbcCommand
        Dim odbcParam As OdbcParameter
    
        Public Overrides Sub AcquireConnections(ByVal Transaction As Object)
    
            Dim connectionString As String
            connectionString = Me.Connections.MyODBCConnectionManager.ConnectionString
            odbcConn = New OdbcConnection(connectionString)
            odbcConn.Open()
    
        End Sub
    
        Public Overrides Sub PreExecute()
    
            odbcCmd = New OdbcCommand("INSERT INTO Person.Address2(AddressID, City) " & _
                "VALUES(?, ?)", odbcConn)
            odbcParam = New OdbcParameter("@addressid", OdbcType.Int)
            odbcCmd.Parameters.Add(odbcParam)
            odbcParam = New OdbcParameter("@city", OdbcType.NVarChar, 30)
            odbcCmd.Parameters.Add(odbcParam)
    
        End Sub
    
        Public Overrides Sub MyAddressInput_ProcessInputRow(ByVal Row As MyAddressInputBuffer)
    
            With odbcCmd
                .Parameters("@addressid").Value = Row.AddressID
                .Parameters("@city").Value = Row.City
                .ExecuteNonQuery()
            End With
    
        End Sub
    
        Public Overrides Sub ReleaseConnections()
    
            odbcConn.Close()
    
        End Sub
    
    End Class
    
    using System.Data.Odbc;
    ...
    public class ScriptMain :
        UserComponent
    {
        OdbcConnection odbcConn;
        OdbcCommand odbcCmd;
        OdbcParameter odbcParam;
    
        public override void AcquireConnections(object Transaction)
        {
    
            string connectionString;
            connectionString = this.Connections.MyODBCConnectionManager.ConnectionString;
            odbcConn = new OdbcConnection(connectionString);
            odbcConn.Open();
    
        }
    
        public override void PreExecute()
        {
    
            odbcCmd = new OdbcCommand("INSERT INTO Person.Address2(AddressID, City) " +
                "VALUES(?, ?)", odbcConn);
            odbcParam = new OdbcParameter("@addressid", OdbcType.Int);
            odbcCmd.Parameters.Add(odbcParam);
            odbcParam = new OdbcParameter("@city", OdbcType.NVarChar, 30);
            odbcCmd.Parameters.Add(odbcParam);
    
        }
    
        public override void MyAddressInput_ProcessInputRow(MyAddressInputBuffer Row)
        {
    
            {
                odbcCmd.Parameters["@addressid"].Value = Row.AddressID;
                odbcCmd.Parameters["@city"].Value = Row.City;
                odbcCmd.ExecuteNonQuery();
            }
    
        }
    
        public override void ReleaseConnections()
        {
    
            odbcConn.Close();
    
        }
    }
    
Icona di Integration Services (piccola) Rimanere aggiornati con Integration Services

Per informazioni sui download, gli articoli, gli esempi e i video Microsoft più recenti, nonché sulle soluzioni selezionate dalla community, visitare la pagina Integration Services su MSDN o TechNet:

Per ricevere notifica automatica su questi aggiornamenti, sottoscrivere i feed RSS disponibili nella pagina.