You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

86 lines
6.9 KiB
Markdown

4 years ago
.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;
+ MySQLDriver={MySQL ODBC 5.2 UNICODE Driver};Server=localhost;Database=myDataBase;User=myUsername;Password=myPassword;Option=3;
+ PostSQLDriver={PostgreSQL UNICODE};Server=IP address;Port=5432;Database=myDataBase;Uid=myUsername;Pwd=myPassword;
+ OracleDriver={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=;
+ 使用RDSMS远程-通过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;