SSIS2012控制流中遍历ExcuteSQLTask控件返回的完整结果集之ScriptTask控件

浏览: 2405

开篇介绍


简单介绍下文中涉及的控件:

ExcuteSQLTask:执行SQL任务,简单说就是sql管理器能执行的脚本,它都可以执行,比如DDL,DDM,存储过程等等。(调用涉及输出参数,返回值参数的存储以后再介绍。)

ScriptTask:脚本任务,用代码来处理的任务,目前支持VB,C#语言,一旦涉及代码,处理方式就很灵活了。微软集成了这块确实很强大。

可能有人会有疑问,ExcuteSQLTask返回的FullDateset直接用Foreach Loop Container 来接收遍历不是比ScriptTask更方便,效率些吗。能用别的方法解决当然用别的方法解决更好,涉及代码处理性能上可能会有影响。也可能会出现必须用代码处理的情况。总的来说要根据实际业务环境和需求来定。

实现步骤


1.以AdventureWordDB数据库中的[Sales].[Store]表取五行作示范。

Clipboard Image.png

Clipboard Image.png

2.拖个ExcuteSQLTask控件配置如下:

连接管理器选择OLEDB连接方式,配置就省略了。

在SQLStatement输入上面写的select语句。ResultSet选择完成结果集。

Clipboard Image.png

3.设置变量来存储ExcuteSQLTask返回的完整结果集

因为返回的是结果集,所以数据类型必须是Object类型。String类型会报类型不匹配错。

Clipboard Image.png

4.设置变量接收返回的完整结果集

Clipboard Image.png

5.拖个ScriptTask控件,做如下配置。

ReadOnlyVariables:只读变量,在代码里面,只能读取变量,不能给变量赋值。这里只是显示结果测试,只读就行了。

ReadWriteVariables:可读可写。

Clipboard Image.png

6.点击编辑脚本按钮,进入C#代码编写界面

Clipboard Image.png

遍历完整结果集C#代码如下:

            OleDbDataAdapter Oledba = new OleDbDataAdapter();
DataTable dt = new DataTable();
Oledba.Fill(dt, Dts.Variables["User::EST_ResultSet"].Value);
foreach (DataRow row in dt.Rows)//遍历完整结果集中的行
{
MessageBox.Show(row[0]+"\n"+row[1]+"\n"+row[2]+"\n"+row[3]+"\n"+row[4]);
}
Dts.TaskResult = (int)ScriptResults.Success;
// OleDbDataAdapter是ado.net访问数据库的内置对象,下次有空再详细介绍下ado.net的常用的五个的内置对象。

注:以上对象必须先引用.net对应的命名空间 using System.Data.OleDb;

Clipboard Image.png

Dts.TaskResult = (int)ScriptResults.Success; //告诉ssis是否执行成功了。

7.配置完后的界面

Clipboard Image.png

8.执行结果会弹出五次对话框,因为只插叙了五条数据。

Clipboard Image.png

总结:

我觉得关键地方有两个,首先,用变量来接收返回的结果集。其次用C#代码来遍历。所以熟悉ado.net访问数据库常用的几个内置对象还是比较重要的。

只是提供一种思路,涉及代码的操作还是非常灵活的。(希望浏览的人会有收获0.0

推荐 2
本文由 粽子job 创作,采用 知识共享署名-相同方式共享 3.0 中国大陆许可协议 进行许可。
转载、引用前需联系作者,并署名作者且注明文章出处。
本站文章版权归原作者及原出处所有 。内容为作者个人观点, 并不代表本站赞同其观点和对其真实性负责。本站是一个个人学习交流的平台,并不用于任何商业目的,如果有任何问题,请及时联系我们,我们将根据著作权人的要求,立即更正或者删除有关内容。本站拥有对此声明的最终解释权。

0 个评论

要回复文章请先登录注册