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
Creare una gestione connessione ODBC che si connette al database AdventureWorks2008R2.
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 )
Aggiungere un nuovo componente script all'area di progettazione del flusso di dati e configurarlo come destinazione.
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.
Aprire Editor trasformazione Script. Nella pagina Colonne di input selezionare le colonne AddressID e City.
Nella pagina Input e output rinominare l'input con un nome più descrittivo, ad esempio MyAddressInput.
Nella pagina Gestioni connessioni aggiungere o creare la gestione connessione ODBC con un nome descrittivo, ad esempio MyODBCConnectionManager.
Nella pagina Script fare clic su Modifica script, quindi immettere lo script seguente nella classe ScriptMain.
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(); } }
|