一次SSIS Package的调试经历

SSIS Package的调试有时是一个非常艰难的过程,由于SSIS 编译器给出的错误信息,可能并不完善,需要程序员根据错误信息抽丝拨茧,寻找错误的根源,进而解决问题。

第一部分:SSIS提供的调试工具

1,SSIS Package的 Control Flow 通过醒目的图标显示task的执行情况

在执行package的时候,如果一个Task上显示绿色的勾,表示task执行正常,如果显示的是红色的X,表示task执行异常。

通常SSIS Package调试的第一步就是寻找出错的Task,然后进入该task的data flow中查看报错的component。

在Task上显示错误信息,进入该task,发现Excel Source没有指定connection manager。

2,在package执行时,会出现一个progress显示执行的进度

如果错误,会在Progress中显示错误的信息

3,Data Viewer 查看从上游组件传递的数据

通过 点击蓝色的数据流线,Enable Data Viewer来查看数据。

4,设置breakpoint

选中Task,点击右键,选中Edit Breakpoint来设置断点,进行调试

5,package 事件,可以在事件中写入特殊的代码,当错误出现时,发送runtime的错误信息或将错误信息写入文档,方便程序员捕捉错误信息,提高debug的效率。

6,以上5种都是非常方便的调试工具,当然SSIS提供的辅助调试工具也有很多,各有用途,如果使用得当,将会使debug更有效率。

第二部分:示例

在使用scripte componet的一个package,出现一个错误信息 “object reference not set to an instance of an object”

说明在 scripte componet的C#代码中,并没有将对象设置为一个有效的实例。

  DataTable dt;  

    public override void PreExecute()
    {
        base.PreExecute();

        IDTSConnectionManager100 cnManager = Connections.Connection;
        SqlConnection cnn = (SqlConnection)cnManager.AcquireConnection(null);

        SqlCommand cmd = cnn.CreateCommand();
        cmd.CommandText = "select code,name from [dbo].[tbExcel]";
        cmd.CommandType = CommandType.Text;
        cmd.CommandTimeout = 60000;

        dt = new DataTable("dt");
        SqlDataAdapter sda = new SqlDataAdapter(cmd);
        sda.Fill(dt);
    }

从PreExecute函数中,可以看出,最有可能的错误原因是 cnManager 并没有获取到Package的Connection Manager

IDTSConnectionManager100 cnManager = Connections.Connection;

查看Script component的connection managers选项卡,已经设置了connection manager,那么错误的原因可能就是Name=Connection的Connection Manager的链接字符串有错误,导致无法连接到DB。

经验证,最终的结果跟推测一样,Connection Manager的链接字符串有错误,无法连接到DB,导致Script component执行失败。

时间: 2024-10-14 15:28:28

一次SSIS Package的调试经历的相关文章

ssis package 在调试状态中设置断点,程序 不进入断点 的解决方案

原文:ssis package 在调试状态中设置断点,程序 不进入断点 的解决方案 针对 SSIS intergation 项目 > 属性 > Debug >Run64bITRuntime = False

[转]SSIS package taking forever to load when you open it?

SSIS package taking forever to load when you open it? Posted on July 13, 2011 by James Serra When you open a SQL Server Integration Services (SSIS) package in SSIS Designer or add components to a package, SSIS by default checks the data sources used

效率最高的Excel数据导入---(c#调用SSIS Package将数据库数据导入到Excel文件中【附源代码下载】) 转

效率最高的Excel数据导入---(c#调用SSIS Package将数据库数据导入到Excel文件中[附源代码下载])  本文目录: (一)背景 (二)数据库数据导入到Excel的方法比较   (三)SSIS的简介   (四)数据库中存储过程示例(SSIS应用需要) (五)Excel模板的制作(这步这么简单,稍微介绍一下)   (六)SSIS操作过程(生成Package,用来调用)(下一篇随笔将详细讲解制作Package包的过程,图片太多,篇幅过长,因此本文将直接采用生成的Package包进行

SSIS Package Configurations 实例

今天学习SSIS Package Configurations,记录一下学习过程 1,将Deployment Model切换到Package Deployment ModelSSIS默认的Deployment Model是Project Deployment Model,右击Project,选择Convert to package deployment model. 2, 在Package中add 一个Variable和一个Execute Sql task,在Execute Sql task中执

SQL Server(SSIS package) call .net DLL

There are two method to call .net DLL in SQLSERVER. The first one is to use the sql clr but it has a lot of limit. The second method is to use SSIS package to call the .net dll. Now I will show the process and the problem you may come accross with it

SSIS Package to Call Web Service

原文 SSIS Package to Call Web Service SSIS Package to Call Web Service. You can Call WebService from SSIS package and transfers your data. First of all you have to create web service with function as  you needed to call. Step1 : Go To Microsoft Visual

SSIS package 在运行时更新 variable

在Package中声明一个variable,在package运行的过程中,SSIS如何update Variable? 第一种方法:使用 Script Task 来更新Variable的值 1,创建一个variable ,VariableName是VarCode,并将变量传递到脚本的ReadWriteVariables数组中. 2,在C#脚本中,SSIS提供两种方式访问变量,第一种方式比较简单,推荐使用. //读写变量 第一种方式 string VarName = this.Dts.Variab

[小技巧]初次接触 SSIS Package 的一点总结

1 动态改变数据源 package从创建到调试到测试到生产环境,往往需要运行在不同的服务器上.我们可以定义Environment和Server两个变量,一个用于改变 Server,一个用于接收实际Server的值.运行于不同的环境时,只用改一个Environment变量的值,Server及数据库连接就会随之改 变. a. 定义Environment和Server变量 b.方法1:Server变量的EvaluateAsExpression设置为true,表达式填写为: @[User::Enviro

SSIS ->> Package Restartability Fullfilled By Checkoints

Checkpoints are the foundation for restarting packages in SSIS, and they work by writing state information to a ?le after each task completes. This ?le can then be used to determine which tasks have run and which have failed. To ensure that the check