在自定义 SSIS 任务中执行 SQL 的首选方式是啥?

Posted

技术标签:

【中文标题】在自定义 SSIS 任务中执行 SQL 的首选方式是啥?【英文标题】:What is the preferred way of executing SQL in a Custom SSIS task?在自定义 SSIS 任务中执行 SQL 的首选方式是什么? 【发布时间】:2009-09-18 08:02:20 【问题描述】:

我正在编写一个自定义 SSIS 任务,作为它的功能之一,它应该在数据库连接上执行一个存储过程。我似乎无法找到有关如何完成此操作的任何信息。

我正在使用 ADO.NET 连接管理器连接到数据库,我希望用 C# 编写我的任务。

在自定义 SSIS 任务中执行 SQL 的首选方式是什么?

【问题讨论】:

【参考方案1】:

这个问题的答案在某种程度上取决于您用于连接数据库的连接管理器,但一般方法是相同的:

    使用Package 对象的Connections 属性在您的自定义任务中获取相关的连接管理器。 在连接管理器上调用AcquireConnection 方法以获取到您的数据库的连接。 使用提供的连接执行 SQL 语句。

此方法允许您利用 SSIS 提供的连接配置和管理。

对于 ADO.NET 连接管理器,可以使用以下代码:

public override DTSExecResult Validate(
  Connections connections, VariableDispenser variableDispenser,
  IDTSComponentEvents componentEvents, IDTSLogging log)

    // Validate connection exists.
    if(!connections.Contains("YourConnection"))
    
        componentEvents.FireError(0, "CustomTask", 
            "Invalid connection manager.", "", 0);
        return DTSExecResult.Failure;
    

    return DTSExecResult.Success;


public override DTSExecResult Execute(Connections connections, 
  VariableDispenser variableDispenser, IDTSComponentEvents componentEvents, 
  IDTSLogging log, object transaction)

    ConnectionManager cm = connections["YourConnection"];

    try
    
        SqlConnection connection 
            = cm.AcqureConnection(transaction) as SqlConnection;

        if(connection == null)
        
            componentEvents.FireError(0, "CustomTask", 
                "Failed to acquire ADO.NET connection.", "", 0);
            Return DTSExecResult.Failure;
        

        // TODO: Use connection to execute SQL.
    
    catch(Exception ex)
    
        componentEvents.FireError(0, "CustomTask", 
            ex.Message, "", 0);

        Return DTSExecResult.Failure;
    

您将需要更好的错误处理,但我不确定如何处理连接的生命周期,是应该手动打开它还是在使用后丢弃。

祝你好运!

【讨论】:

以上是关于在自定义 SSIS 任务中执行 SQL 的首选方式是啥?的主要内容,如果未能解决你的问题,请参考以下文章

在 SSIS 执行 SQL 任务中捕获错误行

SSIS onerror 事件。执行 SQL 任务就坐在那里

008_SSIS 变量赋值的几种方式

如果存储过程失败,则在执行 SQL 任务中将输出变量值获取到 ssis 变量中

SSIS 错误:[执行 SQL 任务] 错误:执行查询

SSIS高级转换任务—执行SQL语句