Published on

May 25, 2023

Преобразование задач ActiveX Script в пакеты SSIS в SQL Server

Если у вас есть несколько пакетов DTS, которые вы хотите переписать для использования SSIS, вы можете столкнуться с проблемой при преобразовании задач ActiveX Script, выполняющих параметризованные запросы к базе данных Oracle. Однако есть решение, которое включает использование задачи Script Component Data Flow в SSIS.

Компонент Script позволяет выполнять код VB.Net внутри потока данных. При добавлении компонента Script в поток данных у вас есть возможность выбрать, будет ли он действовать как источник, назначение или преобразование. В данном случае, для выполнения параметризованных запросов к базе данных Oracle, вы выбрали бы источник.

Вот пример того, как вы можете преобразовать задачу ActiveX Script в источник Script Component в SSIS:


Imports System
Imports System.Data
Imports System.Math
Imports Microsoft.SqlServer.Dts.Pipeline.Wrapper
Imports Microsoft.SqlServer.Dts.Runtime.Wrapper
' ШАГ 1: добавить импорт OracleClient
Imports System.Data.OracleClient

Public Class ScriptMain
    Inherits UserComponent
    ' ШАГ 2: добавить переменные
    Private connMgr As IDTSConnectionManager90
    Private oracleConn As OracleConnection
    Private oracleCmd As OracleCommand
    Private oracleRdr As OracleDataReader
    ' ШАГ 3: добавить переопределение для получения соединения
    Public Overrides Sub AcquireConnections(ByVal Transaction As Object)
        connMgr = Me.Connections.ORCL
        oracleConn = CType(connMgr.AcquireConnection(Transaction), _
                        OracleConnection)
    End Sub
    ' ШАГ 4: добавить переопределение для настройки команды Oracle
    Public Overrides Sub PreExecute()
        Dim sql As String = "SELECT ENAME, JOB FROM SCOTT.EMP " + _
                            "WHERE DEPTNO = :DEPT"
        oracleCmd = New OracleCommand(sql, oracleConn)
        With oracleCmd
            .CommandType = CommandType.Text
            .Parameters.Add(":DEPT", OracleType.Number)
        End With
    End Sub
    ' ШАГ 5: добавить переопределение для освобождения команды Oracle
    Public Overrides Sub PostExecute()
        If Not oracleCmd Is Nothing Then
            oracleCmd.Dispose()
        End If
    End Sub
    ' ШАГ 6: добавить переопределение для освобождения соединения Oracle
    Public Overrides Sub ReleaseConnections()
        connMgr.ReleaseConnection(oracleConn)
    End Sub
    ' ШАГ 7: добавить код для выполнения запроса и добавления результатов
    ' в поток данных
    Public Overrides Sub CreateNewOutputRows()
        Dim DEPT As Integer = Me.Variables.vdept
        With oracleCmd
            .Parameters(":DEPT").Value = DEPT
        End With
        oracleRdr = oracleCmd.ExecuteReader()
        While oracleRdr.Read()
            OutputBuffer.AddRow()
            OutputBuffer.EmployeeName = oracleRdr.GetString(0)
            OutputBuffer.Job = oracleRdr.GetString(1)
        End While
        OutputBuffer.SetEndOfRowset()
    End Sub
End Class

Приведенный выше код демонстрирует шаги, необходимые для преобразования задачи ActiveX Script в источник Script Component в SSIS:

  1. ШАГ 1: Импортируйте пространство имен OracleClient для ссылки на классы без указания полного имени.
  2. ШАГ 2: Определите переменные, которые будут использоваться в коде.
  3. ШАГ 3: Переопределите метод AcquireConnections для получения менеджера соединений Oracle, определенного в пакете SSIS.
  4. ШАГ 4: Переопределите метод PreExecute для настройки команды Oracle, указав параметризованный запрос.
  5. ШАГ 5: Переопределите метод PostExecute для освобождения команды Oracle.
  6. ШАГ 6: Переопределите метод ReleaseConnections для освобождения соединения Oracle.
  7. ШАГ 7: Добавьте код для выполнения запроса и добавления результатов в поток данных.

Следуя этим шагам, вы можете успешно преобразовать ваши задачи ActiveX Script в пакеты SSIS, используя источник Script Component. Это позволяет выполнять параметризованные запросы к базе данных Oracle внутри вашего пакета SSIS.

Хотя в коде может быть достаточное количество кода, большая часть из него останется такой же для любого запроса. Только шаги, связанные с настройкой команды Oracle и выполнением запроса, должны быть изменены в соответствии с вашими конкретными требованиями.

Используя задачу Script Component Data Flow в SSIS, вы можете легко преобразовать ваши задачи ActiveX Script и воспользоваться возможностями и функциональностью SSIS для ваших потребностей в интеграции данных.

Click to rate this post!
[Total: 0 Average: 0]

Let's work together

Send us a message or book free introductory meeting with us using button below.