Criando um destino ODBC com o componente Script
Aplica-se a: SQL Server SSIS Integration Runtime no Azure Data Factory
No SQL Server Integration Services, você normalmente salva os 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çã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 Criar 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.)
Essa amostra usa a tabela Person.Address no banco de dados de exemplo AdventureWorks. O exemplo transmite a primeira e a quarta colunas, e as colunas int AddressID e nvarchar(30) City dessa tabela pelo fluxo de dados. Esses mesmos dados são usados nas amostras de origem, transformação e destino no tópico Desenvolvendo tipos específicos de componentes Script.
Para configurar esse exemplo de componente Script
Crie um gerenciador de conexões ODBC que se conecte ao banco de dados AdventureWorks.
Crie uma tabela de destino executando o comando Transact-SQL seguinte no banco de dados AdventureWorks:
CREATE TABLE [Person].[Address2]([AddressID] [int] NOT NULL, [City] [nvarchar](30) NOT NULL)
Adicione um novo componente Script à superfície do designer de Fluxo de Dados e configure-o como um destino.
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 essa amostra 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 AdventureWorks.
Abra o Editor de Transformação Scripts. Na página Colunas de Entrada, selecione as colunas AddressID e City.
Na página Entradas e Saídas, renomeie a entrada com um nome mais descritivo, como MyAddressInput.
Na página Gerenciadores de Conexões, adicione ou crie o gerenciador de conexões ODBC com um nome descritivo, como MyODBCConnectionManager.
Na página Script, clique em Editar Script e digite o script mostrado abaixo na classe ScriptMain.
Feche o ambiente de desenvolvimento de script e o Editor de Transformação Scripts, então execute a amostra.
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(); } }