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