眼镜:
- 数据库服务器 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 数据库是否支持。因此,如果有人至少可以确认这一点。那会有所帮助。