正确的方法并且也是未来的方法是使用ACE对象模型。您的想法是正确的,本机OLEDB正在从SQL Server中被删除。值得注意的是,在.NET推出时,“一般”的开发人员社区开始放弃ADO(ado.net提供程序是一个非常不同的实体,不依赖于OLEDB,而是sqlprovider)。
因此,我们行业正在发生重大变化。
我们正在远离OLEDB。总的来说,这是一个仅限Windows的技术。随着iPad、智能手机、Android等的兴起,您就没有这样的特定平台提供商,它们也没有OLEDB。因此,您必须重新使用开放数据库连接性标准(ODBC)。Oracle、Microsoft、MySQL都表示这是未来的发展方向和选择。
虽然JET被认为是过时的,但ACE却不是。
自访问2007以来(现在已经完全3个版本),您不需要也不应该引用DAO。因此,在过去的3个Access版本中,您不需要、不想要或不使用DAO对象库的引用。
您现在应该使用新的内置ACE数据库引擎。这意味着您不需要单独引用DAO。
使用ACE引擎有几个优点:
您不再需要DAO引用了。
一次引用数据引擎即可处理之前的两个库引用。
现在有32位和64位版本可用(因此,.net应用程序等可以使用此数据引擎的x64位版本)。JET只有32位。
ACE提供程序继续接收更新和增强。不能为JET或实际上也没有多少ADO做到这一点。
ACE现在支持存储过程和表触发器。它还支持基于Web服务的SharePoint列表。
Access/ACE也进行了更改,以便与SQL Azure配合使用。
要使用Access与SQL Server,您只需使用ACE和链接表即可。请注意,远离ADO的趋势始于约13年前,当时.NET出现了。
因此,现在的标准方法和建议是ACE + ODBC。
因此,您没有错过任何内容。混乱很大程度上源于文章指出JET已被弃用,但是然后遗漏了一个非常重要的细节,即Access在过去3个版本中不再使用JET,而是使用一个名为ACE的新库。
这意味着您的Access应用程序中不再需要DAO的引用。
您肯定正在使用兼容的DAO库,并且建议您仍然在记录集代码中加入DAO前缀(因此,在过去,如果您完成了此操作,或者在声明记录集时总是省略了DAO限定符,则旧的现有代码也将正常工作)。
对于诸如sql通过等的事情,您只需使用保存的通过查询,然后执行以下操作:
CurrentDb.QueryDefs("MyPass").Execute
或者您可以使用一些T-SQL,您可以这样做:
With CurrentDb.QueryDefs("MyPass")
.SQL = "ALTER TABLE Contacts ADD MiddleName nvarchar(50) NULL"
.Execute
End If
或者使用参数在现场调用您选择的存储过程
With CurrentDb.QueryDefs("MyPass")
.SQL = "Exec MyStoreProc " & strMyParm1
.Execute
End If
以上代码看起来简洁明了,相比于使用发布的oleDB/ADO示例,上述代码示例要少得多,并且更加省事。
对于长期使用Access并围绕ODBC和SQL Server开发技能的用户来说,你不需要做任何事情,因为行业已经决定你一直在使用的方法是推荐的方法。
虽然ACE不支持JET-DIRECT,但我想不出任何情况会错过这种选择,因为使用上面的透传查询定义示例代替JET Direct。
Driver={SQL Server}
? - user2140173