Поделиться через


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

В службах 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. В примере передаются первые и четвертые столбцы, столбцы intAddressID и 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();  
    
        }  
    }  
    

Значок служб Integration Services (небольшой) Оставайтесь в курсе в службах Integration Services
Последние загрузки, статьи, примеры и видео из Корпорации Майкрософт, а также выбранные решения из сообщества, посетите страницу служб Integration Services на сайте MSDN:

Посетить страницу «Службы Integration Services» на сайте MSDN

Чтобы получать автоматические уведомления об этих обновлениях, подпишитесь на RSS-каналы, предлагаемые на этой странице.

См. также

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