开篇介绍
简单介绍下文中涉及的控件:
ExcuteSQLTask:执行SQL任务,简单说就是sql管理器能执行的脚本,它都可以执行,比如DDL,DDM,存储过程等等。(调用涉及输出参数,返回值参数的存储以后再介绍。)
ScriptTask:脚本任务,用代码来处理的任务,目前支持VB,C#语言,一旦涉及代码,处理方式就很灵活了。微软集成了这块确实很强大。
可能有人会有疑问,ExcuteSQLTask返回的FullDateset直接用Foreach Loop Container 来接收遍历不是比ScriptTask更方便,效率些吗。能用别的方法解决当然用别的方法解决更好,涉及代码处理性能上可能会有影响。也可能会出现必须用代码处理的情况。总的来说要根据实际业务环境和需求来定。
实现步骤
1.以AdventureWordDB数据库中的[Sales].[Store]表取五行作示范。
2.拖个ExcuteSQLTask控件配置如下:
连接管理器选择OLEDB连接方式,配置就省略了。
在SQLStatement输入上面写的select语句。ResultSet选择完成结果集。
3.设置变量来存储ExcuteSQLTask返回的完整结果集
因为返回的是结果集,所以数据类型必须是Object类型。String类型会报类型不匹配错。
4.设置变量接收返回的完整结果集
5.拖个ScriptTask控件,做如下配置。
ReadOnlyVariables:只读变量,在代码里面,只能读取变量,不能给变量赋值。这里只是显示结果测试,只读就行了。
ReadWriteVariables:可读可写。
6.点击编辑脚本按钮,进入C#代码编写界面
遍历完整结果集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;
Dts.TaskResult = (int)ScriptResults.Success; //告诉ssis是否执行成功了。
7.配置完后的界面
8.执行结果会弹出五次对话框,因为只插叙了五条数据。
总结:
我觉得关键地方有两个,首先,用变量来接收返回的结果集。其次用C#代码来遍历。所以熟悉ado.net访问数据库常用的几个内置对象还是比较重要的。
只是提供一种思路,涉及代码的操作还是非常灵活的。(希望浏览的人会有收获0.0)