专家解答
修改你的ActiveX Script任务的最佳方法就是使用脚本组件数据流任务。这个脚本组件允许你在自己的数据流中执行VB.Net代码。当你把一个脚本组件添加到一个数据流中时,你需要选择下面其中一个选项: 如何使用SSIS中的逆透视数据流转换
源 – 你的代码将从某些地方检索数据,然后把行添加到该数据流中。
目标地址 – 你的代码将从这个数据流的字段中检索数据,然后把这些数据保存在某个地方。
转换 – 你的代码将在这个数据流的字段上做一些转换。
要针对一个Oracle数据库执行参数查询,你需要选择源。下面是我们作为一个实例建立的数据流:
Oracle参数查询
上面数据流的第一个步骤是一个针对Oracle数据库执行一个参数查询并且添加行到数据流中的脚本组件源。 Row Count分配行数到一个程序包变量中,Flat File Destination把每行都写到一个文本文件中,这就允许我们和容易看到抽取的数据。我们将把全部的注意力放在配置脚本组件源和我们需要用来从 Oracle检索数据的VB.Net上。 高效数据检索优化应用程序性能
下面三个步骤与配置脚本组件源有关:
输入和输出 – 定义要添加到数据流中的输出字段。
连接管理器 – 指定在SSIS 程序包定义的任何连接管理器,这里的程序包就是我们将在VB.Net代码中使用的。
脚本- 指定我们在VB.Net代码中使用的任何程序包变量并且输入VB.Net代码。
输入和输出
当你开始编辑脚本组件源属性时,编辑器中的第一页就是如下显示的输入和输出:
使用这个页面指定你想添加到数据流中的输出字段。右键单击输出字段来添加字段。在VB.Net代码中,你要在某个时间添加一行到数据流中并且指定这里定义的每个输出字段的值。
连接管理器oracle认证更多详细资料
连接管理器页面显示如下:
使用这个页面来指定你在SSIS程序包中定义的任何连接管理器,这个程序包正是你想在VB.Net代码中使用的。填写带有自己选择的标识符的名称字段;你输入的名称将指出你怎样引用VB.Net代码中的连接管理器。这个连接管理器字段是一个下拉菜单,你可以选择SSIS程序包定义的任何连接管理器。在我们的例子中,我们将写ADO.Net代码来访问Oracle数据库。当你定义这个连接时,可以打开它,关闭它等等,在代码中让SSIS程序包解决这些细节是很有意义的。在下面的脚本部分中,我将介绍怎样在代码中访问连接管理器。
脚本
脚本页面显示如下:
在ReadOnlyVariables 或者ReadWriteVariables中列出你想要访问VB.Net代码的SSIS程序包中定义的任何变量。在这个例子中,我们将在我们的SQL语句的where从句中使用v_dept变量。
在这个页面上有一个设计脚本按钮(上面的截图中没有显示);单击它启动应用程序环境的Microsoft Visual Studio,在这里,你可以输入VB.Net代码来访问Oracle数据库并且配置该数据流中的行和列。
现在,让我们写脚本组件源的代码。如下,添加一个引用到System.Data.OracleClient集合中。右键单击引用节点,从内容菜单中选择引用,从可用集合列表中选择集合,接着单击添加按钮。这里有一些集合引用是自动添加的;Oracle集合并非如此,所以需要你添加。
下面是针对Oracle数据库执行参数查询和添加结果到数据流中的VB.Net代码:
Imports System
Imports System.Data
Imports System.Math
Imports Microsoft.SqlServer.Dts.Pipeline.Wrapper
Imports Microsoft.SqlServer.Dts.Runtime.Wrapper
' STEP 1: add import of OracleClient
Imports System.Data.OracleClient
Public Class ScriptMain
Inherits UserComponent
' STEP 2: add variables
Private connMgr As IDTSConnectionManager90
Private oracleConn As OracleConnection
Private oracleCmd As OracleCommand
Private oracleRdr As OracleDataReader
' STEP 3: add override to get connection
Public Overrides Sub AcquireConnections(ByVal Transaction As Object)
connMgr = Me.Connections.ORCL
oracleConn = CType(connMgr.AcquireConnection(Transaction), _
OracleConnection)
End Sub
责任编辑:小草