3

我有一个包,用于将 CSV 文件中的记录加载到表中。它在控制流中有三个元素:

  • 截断表
  • 将文件加载到表中
  • 验证加载后表上是否有记录或引发错误

这个想法是在包上有一个事务,因此如果元素加载失败或文件为空,则事务将回滚并且表不会被截断。

要启用事务,我只需转到包属性并设置TransactionOption=Required,然后我只是尝试执行包并在尝试执行第一个元素时收到此错误(尝试截断表的 SQL 任务):

[执行 SQL 任务] 错误:无法获取连接“数据库连接”。连接可能未正确配置,或者您可能对此连接没有正确的权限。

如果我只是返回并将包的 TransactionOption 属性更改为默认值(支持),那么包将正确执行,但如果出现错误,则不会回滚。

我正在使用 ADO.NET 连接到 SQL Server DB。

知道我在做什么错吗?这是使用交易的正确方法还是我错过了什么?

谢谢!

4

1 回答 1

0

我知道这是一个老话题,但我遇到了和你一样的问题 - 包工作正常,直到我将容器事务的选项之一设置为TransactionOption=Required 据我了解,这可能与 Microsoft 分布式事务协调器(MSDTC ) 服务未在 SQL 服务器上启动。

当我遇到这个问题时,我检查了我运行包的机器上是否启动了 MSDTC - 它是。可悲的是,我无法访问 SQL 服务器来检查同样的事情。

但是,在运行包的机器上执行以下步骤解决了问题:

在 Windows Server 2008 和 Windows Vista 上:

  1. 单击Start,单击Run,然后键入dcomcnfg以启动 Component Services Management 控制台。

  2. 单击以展开组件服务并单击以展开计算机

  3. 单击以展开 My Computer,单击以展开Distributed Transaction Coordinator,右键单击Local DTC,然后单击Properties

  4. 单击本地 DTC 属性对话框的安全选项卡。

在该对话框中,我必须启用网络 DTC 访问”以及“允许入站”和“允许出站”。

资料来源:

关于这个的msdn论坛

有关 MSDTC 问题疑难解答的 msdn 文章

于 2017-03-24T08:13:39.197 回答