我们有一些Web服务(用.NET WCF编写),目前访问Microsoft SQL Server数据库以检索/更新数据。我们现在还要求从Microsoft Access数据库检索/更新数据。 Access数据库当前正被许多遗留系统使用,因此我们无法将其真正转换为Microsoft SQL服务器数据库 - 我们仍然使用Access数据库。
我的问题是:有没有办法可以通过Microsoft SQL Server与Access数据库进行通信(这样我们就可以向它发出T-SQL命令,MS SQL Server将处理所有底层映射以查询Access数据库?)或者通过在网络共享上公开Access数据库的位置,通过ADO.NET与Access数据库进行通信是否更好?有没有人有任何我们可以尝试的建议?
谢谢大家。
答案 0 :(得分:5)
如何保留旧版访问应用程序,但将表和数据移出Access应用程序?
Access是SQL服务器的一个很好的前端。使用Access构建应用程序时,就像大多数其他开发工具一样,您必须选择要与Access一起使用的数据引擎和数据库系统。 Access为JET数据引擎(现在称为ACE)内置了本机支持。 Access具有SQL Server内置的本机支持。访问2010不仅内置了使用SharePoint的支持,还支持SQL Auzure。
因此,您可以考虑将Access现在使用的数据移动到SQL Server,如果需要对访问应用程序进行任何更改,则很少。因此,如果表位于文件(mdb或accdb文件)或基于服务器的SQL服务器中,Access应用程序函数会很高兴,实际上对于驻留在SharePoint上的表,Access实际上使用Web服务来更新SharePoint上的数据。但是,在所有情况下,无需更改标准代码,表单,VBA代码甚至SQL。
所以我这里的解决方案不是尝试将SQL服务器连接到位于文件夹中的某个“文件”,而只是将Access连接到SQL服务器以更新表,并且不需要“传输”数据系统之间将再存在。
答案 1 :(得分:2)
链接服务器允许访问针对OLE DB数据源的分布式异构查询。使用sp_addlinkedserver创建链接服务器后,可以对该服务器运行分布式查询。
如果您只是在32位平台上运行:
EXEC sp_addlinkedserver
@server = N'SEATTLE Mktg',
@provider = N'Microsoft.Jet.OLEDB.4.0',
@srvproduct = N'OLE DB Provider for Jet',
@datasrc = N'C:\MSOffice\Access\Samples\Northwind.mdb';
或者如果您还要担心64位:
EXEC sp_addlinkedserver
@server = N'SEATTLE Mktg',
@provider = N'Microsoft.ACE.OLEDB.12.0',
@srvproduct = N'OLE DB Provider for ACE',
@datasrc = N'C:\MSOffice\Access\Samples\Northwind.accdb';