Бөлісу құралы:


Создание назначения ODBC с помощью компонента скрипта

Область применения: среда выполнения интеграции SSIS SQL Server в Фабрика данных Azure

В службах SQL Server Integration Services обычно данные сохраняются в назначении ODBC с помощью назначения ADO.NET и поставщика данных платформа .NET Framework для ODBC. Однако можно также создать нерегламентированное назначение ODBC для использования в отдельном пакете. Для создания такого нерегламентированного назначения ODBC используется компонент скрипта, показанный в следующем примере.

Примечание.

Если нужно создать компонент, который будет полезен в нескольких задачах потока данных и нескольких пакетах, рекомендуется в качестве основы использовать этот образец компонента скрипта. Дополнительные сведения см. в разделе Разработка пользовательского компонента потока данных.

Пример

В следующем примере показано, как создать целевой компонент, использующий существующий диспетчер соединений ODBC для сохранения данных из потока данных в таблицу Microsoft SQL Server.

В этом примере представлена измененная версия пользовательского назначения ADO.NET, показанная в разделе " Создание назначения с помощью компонента скрипта". Однако в этом примере пользовательская ADO.NET назначения была изменена для работы с диспетчером соединений ODBC и сохранения данных в назначении ODBC. Были внесены, в частности, следующие изменения:

  • Вы не можете вызывать метод AcquireConnection диспетчера подключений ODBC из управляемого кода, так как при этом возвращается собственный объект. Поэтому в этом примере используется строка подключения диспетчера соединений для подключения к источнику данных непосредственно с помощью управляемого поставщика данных ODBC платформа .NET Framework.

  • Команда OdbcCommand ожидает позиционные параметры. Позиции параметров отмечаются вопросительными знаками (?) в тексте команды. (Команда SqlCommand, напротив, ожидает именованные параметры.)

В этом примере используется таблица Person.Address из образца базы данных AdventureWorks. В примере первый и четвертый столбцы этой таблицы, int AddressID и nvarchar(30) City, передаются через поток данных. Эти же данные используются в образцах источника, преобразования и назначения в разделе Разработка определенных типов компонента скрипта.

Настройка этого примера компонента скрипта

  1. Создайте диспетчер подключений ODBC, который соединяется с базой данных AdventureWorks.

  2. Создайте целевую таблицу, выполнив следующую команду Transact-SQL в базе данных AdventureWorks:

    CREATE TABLE [Person].[Address2]([AddressID] [int] NOT NULL,  
        [City] [nvarchar](30) NOT NULL)  
    
  3. Добавьте новый компонент скрипта в область конструктора потока данных и настройте его в качестве назначения.

  4. Подключите выходные данные вышестоящего источника или преобразования к целевому компоненту в конструкторе служб SSIS. (Вы можете подключить источник непосредственно к месту назначения без каких-либо преобразований.) Чтобы убедиться, что этот пример работает, выходные данные вышестоящего компонента должны содержать по крайней мере столбцы AddressID и City из таблицы Person.Address образца базы данных AdventureWorks.

  5. Откройте редактор преобразования "Скрипт". На странице Входные столбцы выберите столбцы AddressID и City.

  6. На странице Входы и выходы измените имя входа на более описательное, например ВходАдреса.

  7. На странице Диспетчеры соединений добавьте или создайте диспетчер подключений ODBC с описательным именем, например ДиспетчерПодключенийODBC.

  8. На странице Скрипт нажмите кнопку Изменить скрипт и введите следующий код в класс ScriptMain.

  9. Закройте среду разработки скриптов и редактор преобразования "Скрипт", затем выполните образец.

    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();  
    
        }  
    }  
    

См. также

Создание назначения с помощью компонента скрипта