1

我之前问过一个类似的问题(尽管特定于从 xp_cmdshell 运行包)。我对此事的最后评论是询问如果我想确保 SSIS 包参与事务,我的选择是什么。

那么,有什么方法可以让我执行一个 SSIS 包并让它参与到一个已经存在的事务中呢?

如果出于测试目的,我们想要这样做的原因是:

  • 运行包以加载数据。
  • 针对加载的数据运行测试。
  • 将所有加载的数据回滚。

谢谢,斯图尔特。

4

1 回答 1

2

互联网对这个问题的解决方案非常安静。我遇到了同样的问题,到处寻找解决方案。SSIS 对错误操作时生成的错误消息也没有帮助(未记录的错误代码)。答案可能有点晚,但希望它能帮助某人避免浪费时间。这就是最终为我工作的原因。

例如,在单元测试中,将整个过程包装在 TransactionScope 中:

using (TransactionScope scope = new TransactionScope(TransactionScopeOption.RequiresNew,new TransactionOptions(){IsolationLevel =IsolationLevel.ReadCommitted}))
        { 
          Application app = new Application();
          Package package = app.LoadPackage(packageFileName, null);

          // Can set package settings for test
          package.TransactionOption = DTSTransactionOption.Required;
          package.IsolationLevel = IsolationLevel.ReadCommitted;

          // Use this overload for execute
          DTSExecResult result = package.Execute(null, null, null, null, TransactionInterop.GetDtcTransaction(Transaction.Current));

          // Test results here inside the scope
}

当然,如果您想将数据添加到数据库中,您可以重新排列,然后通过 SSIS 提取它,然后在测试数据后回滚。

于 2012-09-14T06:08:10.147 回答