为了正常的体验网站,请在浏览器设置里面开启Javascript功能!
首页 > 执行Oracle参数查询

执行Oracle参数查询

2018-08-03 8页 doc 115KB 7阅读

用户头像

is_841159

暂无简介

举报
执行Oracle参数查询执行Oracle参数查询 专家解答 修改你的ActiveX Script任务的最佳方法就是使用脚本组件数据流任务。这个脚本组件允许你在自己的数据流中执行VB.Net代码。当你把一个脚本组件添加到一个数据流中时,你需要选择下面其中一个选项: 如何使用SSIS中的逆透视数据流转换 源 – 你的代码将从某些地方检索数据,然后把行添加到该数据流中。 目标地址 – 你的代码将从这个数据流的字段中检索数据,然后把这些数据保存在某个地方。 转换 – 你的代码将在这个数据流的字段上做一些转换。 要针对一个Oracle数据库执行参数...
执行Oracle参数查询
执行Oracle参数查询 专家解答 修改你的ActiveX Script任务的最佳方法就是使用脚本组件数据流任务。这个脚本组件允许你在自己的数据流中执行VB.Net代码。当你把一个脚本组件添加到一个数据流中时,你需要选择下面其中一个选项: 如何使用SSIS中的逆透视数据流转换 源 – 你的代码将从某些地方检索数据,然后把行添加到该数据流中。 目标地址 – 你的代码将从这个数据流的字段中检索数据,然后把这些数据保存在某个地方。 转换 – 你的代码将在这个数据流的字段上做一些转换。 要针对一个Oracle数据库执行参数查询,你需要选择源。下面是我们作为一个实例建立的数据流: Oracle参数查询 src=" 721798.jpg" width=414 twffan="done"> 图一 上面数据流的第一个步骤是一个针对Oracle数据库执行一个参数查询并且添加行到数据流中的脚本组件源。Row Count分配行数到一个程序包变量中,Flat File Destination把每行都写到一个文本文件中,这就允许我们和容易看到抽取的数据。我们将把全部的注意力放在配置脚本组件源和我们需要用来从Oracle检索数据的VB.Net上。 高效数据检索优化应用程序性能 下面三个步骤与配置脚本组件源有关: 输入和输出 – 定义要添加到数据流中的输出字段。 连接管理器 – 指定在SSIS 程序包定义的任何连接管理器,这里的程序包就是我们将在VB.Net代码中使用的。 脚本- 指定我们在VB.Net代码中使用的任何程序包变量并且输入VB.Net代码。 输入和输出 当你开始编辑脚本组件源属性时,编辑器中的第一页就是如下显示的输入和输出: 图二 使用这个页面指定你想添加到数据流中的输出字段。右键单击输出字段来添加字段。在VB.Net代码中,你要在某个时间添加一行到数据流中并且指定这里定义的每个输出字段的值。 连接管理器 连接管理器页面显示如下: 图三 使用这个页面来指定你在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 ' 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需要基于运行的查询进行修改。
/
本文档为【执行Oracle参数查询】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。 本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。 网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。

历史搜索

    清空历史搜索