MS Access 在C#中使用DAO的踩坑记录
DAO是微软为访问Access数据设计的特殊接口。从Access2.0出现,DAO一直是作为默认的接口存在。ADO是作为DAO的一种替代方案一直存在。DAO和ADO可以在一个项目中同时使用。历史上,微软曾经在2003推荐使用ADO,但是后来2007后,又将DAO作为默认接口。
在Access2007之前,文件形式一直是mdb,数据库引擎最高为JET4.0,DAO接口最高版本为DAO3.6。DAO是Windows系统中自带的库,所以在C#开发中甚至不需要安装JET引擎和DAO的库。这里需要注意,JET引擎只有32位版本,未来也不会出64位版本,所以程序编译需要选择x86平台,否则会报错。另一个小技巧需要注意,Access2.0和1995虽然使用mdb文件形式,但是在最新版的Access中是打不开的。如果是手动的转换文件形式,可以用2003-2007版的Access打开95版的后保存后,再用最新版2019打开,可以实现转换为accdb。如果想用代码实现mdb到accdb文件的转换可以参考这个库中的603号函数,具体使用方法未做研究。Microsoft.Office.Interop.Access;
accessApp.SysCmd((Access.AcSysCmdAction)603, sourceFile, desFile);
在2007版之后,文件形式更改为accdb,JET引擎和DAO3.6都被微软弃用,取而代之的是ACE
引擎和ACEDAO。如果在VC++中使用CDAODATABSE或者CDAOTABDEF或者CDAORECORDESET这种库,会发现MSDN上标记了obsolete。但这不意味着,DAO3.6不能在使用,而是不再支持ACE引擎中更新的功能。老的程序使用DAO3.6,不用担心在未来运行不了