Criando um destino ODBC com o componente Script

No SQL Server Integration Services, você normalmente salva dados em um destino ODBC usando um destino ADO.NET e o Provedor de Dados .NET Framework para ODBC. Porém, você também pode criar um destino ODBC ad hoc para uso em um único pacote. Para criar esse destino ODBC ad hoc, use o componente Script conforme demonstrado no exemplo seguinte.

ObservaçãoObservação

Se desejar criar um componente que possa ser reutilizado mais facilmente em várias tarefas de fluxo de dados e em vários pacotes, procure utilizar o código deste exemplo de componente Script como o ponto inicial de um componente de fluxo de dados personalizado. Para obter mais informações, consulte Desenvolvendo um componente de fluxo de dados personalizado.

Exemplo

O exemplo a seguir demonstra como criar um componente de destino que usa um gerenciador de conexões ODBC existente para salvar dados do fluxo de dados em uma tabela do Microsoft SQL Server.

Esse exemplo é uma versão modificada do destino ADO.NET personalizado que foi demonstrado no tópico Criando um destino com o componente Script. Contudo, nesse exemplo, o destino ADO.NET personalizado foi modificado para funcionar com um gerenciador de conexões ODBC e salvar dados em um destino ODBC. Essas modificações também incluem as alterações seguintes:

  • Você não pode chamar o método AcquireConnection do gerenciador de conexões ODBC do código gerenciado, porque ele retorna um objeto nativo. Portanto, esse exemplo usa a cadeia de conexão do gerenciador de conexões para se conectar à fonte de dados diretamente, usando o Provedor de Dados .NET Framework ODBC gerenciado.

  • O OdbcCommand espera parâmetros posicionais. As posições dos parâmetros são indicadas pelos pontos de interrogação (?) no texto do comando. (Por outro lado, um SqlCommand espera parâmetros nomeados).

Este exemplo usa a tabela Person.Address no banco de dados de exemplo do AdventureWorks2008R2. O exemplo transmite a primeira e a quarta colunas, e as colunas int AddressID e nvarchar(30) City, da tabela por meio do fluxo de dados. Esses mesmos dados são usados nos exemplos de origem, transformação e destino no tópico Desenvolvendo tipos específicos de componentes Script.

Para configurar esse exemplo de componente Script

  1. Crie um gerenciador de conexões ODBC que se conecte ao banco de dados AdventureWorks2008R2.

  2. Crie uma tabela de destino executando o seguinte comando Transact-SQL no banco de dados AdventureWorks2008R2:

    CREATE TABLE [Person].[Address2](
        [AddressID] [int] NOT NULL,
        [City] [nvarchar](30) NOT NULL
    )
    
  3. Adicione um novo componente Script à superfície do designer de Fluxo de Dados e configure-o como um destino.

  4. Conecte a saída de uma origem ou transformação upstream para o componente de destino no Designer SSIS. (Você pode conectar uma origem diretamente a um destino, sem transformações.) Para que esse exemplo funcione, a saída do componente upstream deve incluir pelo menos as colunas AddressID e City da tabela Person.Address do banco de dados de exemplo do AdventureWorks2008R2.

  5. Abra o Editor de Transformação Scripts. Na página Colunas de Entrada, selecione as colunas AddressID e City.

  6. Na página Entradas e Saídas, renomeie a entrada com um nome mais descritivo, como MyAddressInput.

  7. Na página Gerenciadores de Conexões, adicione ou crie o gerenciador de conexões ODBC com um nome descritivo, como MyODBCConnectionManager.

  8. Na página Script, clique em Editar Script e digite o script mostrado abaixo na classe ScriptMain.

  9. Feche o ambiente de desenvolvimento de script e o Editor de Transformação Scripts, além de executar o exemplo.

    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();
    
        }
    }
    
Ícone do Integration Services (pequeno) Fique atualizado com o Integration Services

Para obter os mais recentes downloads, artigos, exemplos e vídeos da Microsoft, bem como soluções exclusivas da comunidade, visite a página do Integration Services no MSDN ou TechNet:

Para receber uma notificação automática das atualizações, assine os feeds RSS disponíveis na página.

Consulte também

Conceitos