Если у вас есть несколько пакетов 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: Импортируйте пространство имен OracleClient для ссылки на классы без указания полного имени.
- ШАГ 2: Определите переменные, которые будут использоваться в коде.
- ШАГ 3: Переопределите метод AcquireConnections для получения менеджера соединений Oracle, определенного в пакете SSIS.
- ШАГ 4: Переопределите метод PreExecute для настройки команды Oracle, указав параметризованный запрос.
- ШАГ 5: Переопределите метод PostExecute для освобождения команды Oracle.
- ШАГ 6: Переопределите метод ReleaseConnections для освобождения соединения Oracle.
- ШАГ 7: Добавьте код для выполнения запроса и добавления результатов в поток данных.
Следуя этим шагам, вы можете успешно преобразовать ваши задачи ActiveX Script в пакеты SSIS, используя источник Script Component. Это позволяет выполнять параметризованные запросы к базе данных Oracle внутри вашего пакета SSIS.
Хотя в коде может быть достаточное количество кода, большая часть из него останется такой же для любого запроса. Только шаги, связанные с настройкой команды Oracle и выполнением запроса, должны быть изменены в соответствии с вашими конкретными требованиями.
Используя задачу Script Component Data Flow в SSIS, вы можете легко преобразовать ваши задачи ActiveX Script и воспользоваться возможностями и функциональностью SSIS для ваших потребностей в интеграции данных.