' STEP 4: add override to setup the oracle command
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
' STEP 5: Add override to dispose of the oracle command
Public Overrides Sub PostExecute()
If Not oracleCmd Is Nothing Then
oracleCmd.Dispose()
End If
End Sub
' STEP 6: Add override to release the oracle connection
Public Overrides Sub ReleaseConnections()
connMgr.ReleaseConnection(oracleConn)
End Sub
' STEP 7: Add code to execute the query and add the results
' to the data flow
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
下面是上面显示的代码要点:
STEP 1 – 添加一个输入语句,因此我们可以引用System.Data.OracleClient命名空间中的类而不用指定全名;例如,在步骤2 中,oracleConn变量被定义成一个OracleConnection类型;没有输入语句,它可能被定义成 System.Data.OracleClient.OracleConnection。
STEP 2 – 定义在整个代码中使用的一些变量。
STEP 3 – 包含代码来使用在SSIS 程序包中定义的Oracle连接管理器。
STEP 4 – 建立oracleCmd变量,指定包含DEPT值的参数的查询。注意,这个参数在查询中是以冒号开头的;这是Oracle要求的一个语法。你可以有多个参数;只需把它们添加到这个查询中并且如下调用Parameters.Add方法。
STEP 5 和STEP 6 – 两个都是清除函数。
STEP 7 – 包含执行查询和添加返回到数据流的每行的代码。oracleCmd和oracleRdr变量在步骤2中定义。请注意,vdept变量用来提供在步骤4中定义的DEPT参数值。ExecuteReader方法在你想要执行返回行的查询时使用;它返回一个OracleReader。Read方法被调用来读取结果集中的每行。对于读取的每行,我们通过调用OutputBuffer中的AddRow方法然后把值分配给在脚本组件源的输入和输出页面中定义的每个输出字段来把一行添加到数据流中。SetEndOfRowSet方法在OutputBuffer中调用,从而指出我们完成了添加行的过程。
请注意,这里的代码量是很大的,但是主要部分对于任何查询都是相同的。对于大多数来说,只有 STEP 4和STEP 7需要基于运行的查询进行修改。
上一页 [1] [2]
责任编辑:小草