6

眼镜:

  • 数据库服务器 2008
  • 服务器 2008 R2 64 位
  • MS Access 数据库

什么有效:

  • 我通过安装办公室访问数据组件并创建系统 DSN 等配置了与 Access 数据库的链接服务器连接。它驻留在同一服务器上的目录中。
  • 我已经成功通过openquery查询数据。

    SELECT * FROM OPENQUERY(LINKEDHELL, 'SELECT * FROM [D:\path\mordor.mdb].Orcs')

  • 我可以通过 openquery 插入/更新/删除(从 Sql Management Studio 内部)

什么不起作用:

我创建了一个数据库,它公开了一个包装 openquery 表达式的视图。这使我的应用程序可以忽略它通过链接服务器连接进行查询的事实,并允许我使用 ORM。恰当的例子:实体框架。

然而,虽然检索数据有效,但更新/插入/删除不会。我花了很多时间确保 MSDTC 配置正确,但没有骰子。

我试过的

MSDTC

  • 启用网络 DTC 访问
  • 允许入站/出站
  • 配置的防火墙
  • 启用 XA 事务
  • 向 DTC 工作的帐户授予对 .mdb 的访问权限
  • 进行这些设置后重新启动 Sql Server

其他

  • 配置的链接服务器安全性:在 sql 用户和本地管理员帐户之间创建映射,以便当我使用该 sql 用户登录时,它使用本地管理员帐户连接到访问数据库。
  • 为 RPC 启用分布式事务的提升:False

我得到的错误:

OLE DB provider "MSDASQL" for linked server "LINKEDHELL" returned message "[Microsoft][ODBC Microsoft Access Driver]Invalid attribute/option identifier ".
Msg 7391, Level 16, State 2, Line 4
The operation could not be performed because OLE DB provider "MSDASQL" for linked server "LINKEDHELL" was unable to begin a distributed transaction.

我可以通过 Sql Management Studio 简单地重新创建它

begin distributed transaction

//anything that queries the linked server

commit transaction

那么我错过了什么?我读过 ODBC 驱动程序支持分布式事务,但我不确定 ACCESS 数据库是否支持。因此,如果有人至少可以确认这一点。那会有所帮助。

4

1 回答 1

1

Access 没有事务,因为 Access 不是数据库引擎。只要我使用过 Jet/ACE(Access 的默认数据库引擎),它就支持提交/回滚(从 Jet 2.x 开始,例如 1996 年)。它从来不支持事务日志,而且可能永远不会(我知道这不是你要问的,但是许多从服务器数据库背景来到 Jet/ACE 的人对术语“事务”的含义相当模糊,并且很难时间掌握 Jet/ACE 支持一个而不是另一个)。– David-W-Fenton 2010 年 1 月 16 日 23:12

--我们在 MS-Access 中有交易吗?

大卫·W·芬顿,MVP,RIP

于 2012-08-07T09:48:13.083 回答