我在 ASP.NET 中编写了一个 Web 应用程序,它将所有数据存储在 SQL Server 2008r2 中,并通过存储过程运行所有内容。该应用程序正在为希望将 2-3 条数据推送到他们使用的具有 Microsoft Access 2003 后端(.MDB 文件)的旧应用程序的部门收集数据。我的想法是为 Access 创建一个链接服务器,这样我的应用程序就可以将所有内容推送到 SQL 服务器,并且可以从那里处理它(看起来很简单)。根据来自 MSDN 的信息(此处和此处),我使用以下 SQL 命令创建链接服务器:
EXEC sys.sp_addlinkedserver @server = N'CMPtesting' ,
@datasrc = N'\\srv.local\SHAREDOCS\MPS\CMPdata.mdb' ,
@srvproduct = N'Access' ,
@provider = N'Microsoft.Jet.OLEDB.4.0'
这成功完成,我可以看到我的 CMPtesting 服务器列在Server Objects -> Linked Servers
. 但是,如果我尝试使用此验证服务器:
SELECT name FROM [CMPtesting].master.sys.databases
甚至只是查看表格,我得到一个错误:
OLE DB 提供程序“Microsoft.Jet.OLEDB.4.0”不能用于分布式查询,因为提供程序配置为在单线程单元模式下运行。(Microsoft SQL Server,错误:7308)
研究该错误导致我找到“ SQL to Access 链接服务器”,它建议安装一些不同的 Access 驱动程序,然后使用@provider = N'Microsoft.ACE.OLEDB.12.0'
而不是 Jet 驱动程序。同样,这成功完成,但尝试查看表会产生不同的错误:
无法为链接服务器“CMPtesting”创建 OLE DB 提供程序“Microsoft.ACE.OLEDB.12.0”的实例。(Microsoft SQL Server,错误:7302)
我知道这不仅仅是一个无效的驱动程序错误,因为如果我只是编造一个提供者名称,我会得到这个:
OLE DB 提供程序“foobar”尚未注册。(Microsoft SQL Server,错误:7403)
我不确定还可以尝试什么,因为我的所有搜索都只是在sp_addlinkedserver
没有任何其他详细信息或帮助解决这些错误的情况下对如何运行进行了更多重新散列。