.net 操作 Access 数据库 === ## 一、前提条件 1. 安装 Office 软件,必须包括Access程序 > 安装 Office Access 是.net(.net core)程序操作Access数据库的基础。 > 在执行.net操作Access数据的程序的系统中,必须先安装Office Access。 2. 安装 AccessDatabaseEngine > 是微软 Access 数据库引擎可再发行程序包,顾名思义是微软的access数据库调用引擎。 > .net 程序通过调用此引擎,操作Access数据数据库。 **特别注意** 32位与64位版本问题 > 32位操作系统上,只能安装32位Office Access;64位操作系统可以安装64位Office Access与32位Office Access之一。 > AccessDatabaseEngine需要与 Office Access保持一致:即32位Office安装32位DatabaseEngine,64位Office安装64位DatabaseEngine。 > .net程序最好与office位数保持一致:在安装了32位Access的系统上运行32位.net程序,在安装了64位Access系统上运行64位.net程序。在不一致的情况下,可能出错,更改编译或发布时CPU选项(AnyCPU x86 x64)有助于解决问题。 > 目前找到了AccessDatabaseEngine2010版与AccessDatabaseEngine2016版,后者能调用最新版的Access 2019. ## 二、操作类库 1. System.Data.Odbc 类库 > ODBC(Open Database Connectivity)即开放数据库互连,是一种早期数据库接口技术,实际上是ADO的前身。 > 早期,每个数据库的格式都不一样,开发者得对他们所开发的每种数据库的底层API有深刻的了解. 因此,能处理各种各样数据库的通用的API就应运而生了. 也就是现在的ODBC。遵从了这种标准的数据库,被称为ODBC兼容的数据库. > 可以直接使用系统配置好的三种DNS:用户dsn、系统dsn和文件dsn;也可以完全由程序设定连接信息。 2. System.Data.OleDb 类库 > OLEDB(对象连接和嵌入数据库)是微软的一个战略性系统级编程接口,用于管理整个组织内的数据。 > OLEDB是建立在ODBC功能之上的一个开放规范。 > ODBC是为访问关系型数据库而专门开发的,OLEDB则用于访问关系型和非关系型信息源. > OLEDB定义了一组COM接口,对各种数据库管理系统服务进行封装,并允许创建软件组件,实现这些服务。 > OLEDB组件包括数据提供程序(包含和表现数据)、数据使用者(使用数据)和服务组件(处理和传送数据,例如,查询处理器和游标引擎)。 > OLEDB接口有助于平滑地集成组件,这样,OLEDB组件厂商就可以快速地向市场提供高质量OLEDB组件。 > 此外,OLEDB包含了一个连接ODBC的“桥梁”,对现用的各种ODBC关系型数据库驱动程序提供一贯的支持。---号称取代odbc,但也兼容odbc 区别与联系: + Oledb建立在ODBC之上; + ODBC为关系数据库专用;Oledb则同时支持关系数据库和非关系数据库(主机ISAM/VSAM和层次数据库、电子邮件和文件系统存储,文本、图形和地理数据以及自定义业务对象). + Oledb编程方面可以取代ODBC + Oledb兼容ODBC 结论:优先使用Oledb ## 层级关系 应用程序 -> ADO -> ODBC -> 数据源 应用程序 -> ADO -> OLE DB -> 数据源 ![调用关系](Images/1.png) ## 四、[连接字符串](https://www.connectionstrings.com/) 程序中有两种方式:直接使用连接字符串;使用连接构建器OdbcConnectionStringBuilder或者OleDbCommandBuilder > 注意:Access2007之后与之前版本,连接字符串有区别,以下以高版本为示子。具体[查看](https://www.connectionstrings.com/) + ODBC连接字符串 + Access + 系统dsn: DSN=dsnname 或者:DSN=dsnname;UID=xx;PWD=xxx; + 文件dsn: FILEDSN=c:\myDsnFile.dsn;Uid=myUsername;Pwd=; + 标准连接:Driver={Microsoft Access Driver (*.mdb, *.accdb)};Dbq=C:\mydatabase.mdb; + 标准安全:Driver={Microsoft Access Driver (*.mdb, *.accdb)};Dbq=C:\mydatabase.accdb;Uid=Admin;Pwd=; + 工作组:Driver={Microsoft Access Driver (*.mdb, *.accdb)};Dbq=C:\mydatabase.accdb;SystemDB=C:\mydatabase.mdw; + 独占模式:Driver={Microsoft Access Driver (*.mdb, *.accdb)};Dbq=C:\mydatabase.accdb;Exclusive=1;Uid=admin;Pwd=; + 文本文件连: Driver={Microsoft Text Driver (*.txt; *.csv)};Dbq=c:\txtFilesFolder\;Extensions=asc,csv,tab,txt; + Excel: Driver={Microsoft Excel Driver (*.xls, *.xlsx, *.xlsm, *.xlsb)};DBQ=C:\MyExcel.xlsx; + SQL Server 2019: Driver={ODBC Driver 17 for SQL Server};Server=myServerAddress;Database=myDataBase;UID=myUsername;PWD=myPassword; + SQL Server windows连接:Driver={ODBC Driver 17 for SQL Server};Server=myServerAddress;Database=myDataBase;Trusted_Connection=yes; + MySQL:Driver={MySQL ODBC 5.2 UNICODE Driver};Server=localhost;Database=myDataBase;User=myUsername;Password=myPassword;Option=3; + PostSQL:Driver={PostgreSQL UNICODE};Server=IP address;Port=5432;Database=myDataBase;Uid=myUsername;Pwd=myPassword; + Oracle:Driver={Microsoft ODBC for Oracle};Server=myServerAddress;Uid=myUsername;Pwd=myPassword; + OLEDB连接字符串 + Microsoft Jet OLE DB 4.0:老版本支持Office2003及之前 + 标准安全: Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\mydatabase.mdb;User Id=admin;Password=; + 数据库密码: Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\mydatabase.mdb;Jet OLEDB:Database Password=MyDbPassword; + 工作组:Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\mydatabase.mdb;Jet OLEDB:System Database=system.mdw; + 系统数据库:Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\mydatabase.mdb;Jet OLEDB:System Database=system.mdw;User ID=myUsername;Password=myPassword; + DataDirectory功能:Provider=Microsoft.Jet.OLEDB.4.0;Data Source=|DataDirectory|\myDatabase.mdb;User Id=admin;Password=; + 网络位置:Provider=Microsoft.Jet.OLEDB.4.0;Data Source=\\serverName\shareName\folder\myDatabase.mdb;User Id=admin;Password=; + 使用RDS(MS远程-通过HTTP访问数据库。您必须在服务器上设置RDS才能工作):Provider=MS Remote;Remote Provider=Microsoft.Jet.OLEDB.4.0;Remote Server=http://server.adress.com;Data Source=d:\myPath\myDatabase.mdf; + 独占访问权限:Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\mydatabase.mdb;Mode=Share Exclusive;User Id=admin;Password=; + Microsoft Jet OLE DB 12.0:新版 本支持Office2007及之后的版本 + 标准安全: Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\myFolder\myAccessFile.accdb;Persist Security Info=False; + 数据库密码: Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\myFolder\myAccessFile.accdb;Jet OLEDB:Database Password=MyDbPassword; + DataDirectory功能:Provider=Microsoft.ACE.OLEDB.12.0;Data Source=|DataDirectory|\myAccessFile.accdb;Persist Security Info=False; + 网络位置:Provider=Microsoft.ACE.OLEDB.12.0;Data Source=\\server\share\folder\myAccessFile.accdb;