【.net 深呼吸】连接Access数据库应注意的几点

本地数据库可以有Y种选择,比如Sqlite、SQL Server Express、SQL Local DB、SQL Server CE、Access等,本文老周选用比较著名的Access本地数据库,在连接数据库应该注意的几个事情。

Access数据库是Office家族的一员,历史悠久,相信各位不会陌生。不过,有些东西可能你以前没关注到,不妨咱们一起关注一下。

一、判断用于连接的Provider是否可用

过去,连接Access数据库,我们都会使用OLEDB的Microsoft.Jet.OLEDB.4.0提供程序,系统默认也带有该驱动程序,所以使用起来也特特地方便。

但jet.oledb通常是32位的,如果应用程序编译为x64版本,会发生异常。如下图所示。

如果改为x86就可以正常运行。而且,你也发现了,改用Any CPU也可以正常运行,为啥呢。

现在你打开项目属性窗口,然后切换到“生成”选项卡,在Any CPU选项中,是不是看到一个选项叫“首选32位”?好,现在你把“首选32位”的对勾去掉,如下图所示。

然后,你在64位平台上运行,同样会发生异常。如果勾选了“首选32位”就不会发生异常。

万物皆在变化之中,Access版本不断更新,从2007起,.mdb文件变成了.accdb文件,所以,使用Jet.OLEDB引擎是不能连接.mdb文件的。

连接.accdb文件的提供程序为Microsoft.ACE.OLEDB.12.0,即连接字符串应该这样写:

Provider=Microsoft.ACE.OLEDB.12.0;Data Source=|DataDirectory|\\students.accdb

有关连接字符串,你可以到下面这个网站上抄:http://www.connectionstrings.com/

这个网站上面可以找到各种各样数据库的连接字符串,资源丰富,相当值得收

系统默认是不带Microsoft.ACE.OLEDB.12.0驱动程序的,你得到这里下载: https://www.microsoft.com/zh-cn/download/details.aspx?id=13255

在连接.accdb文件时,一定要对上版本,如果你安装的引擎是32位的,应用程序应该生成为x86版本,如果安装的引擎是64位的,那么,你的应用程序应生成x64版本。

有大伙伴朋友一定会问了,那有没有办法判断系统是否带有特定的提供程序,如果没有,可提示用户安装?答案自然是肯定的,来来来,先看看这个例子。

看代码:

            OleDbDataReader reader = OleDbEnumerator.GetRootEnumerator();
            DataTable table = new DataTable();
            table.Load(reader);
            dataGridView1.DataSource = table.DefaultView;

或者,可以这样:

            OleDbEnumerator enumerator = new OleDbEnumerator();
            DataTable dt = enumerator.GetElements();
            dataGridView1.DataSource = dt.DefaultView;

这样一耍,就会把当前所支持的OLEDB的提供程序都列出来了。如下图。

其中,SOURCES_NAME列就是提供程序的名称,所以,在程序代码中,只要检测一下你要的提供程序是否存在,就可以知道有没有安装相关的引擎了。

比如,下面代码验证一下当前运行环境是否可以连接.accdb文件。

            string accdbPrd = "Microsoft.ACE.OLEDB.12.0";
            OleDbEnumerator enu = new OleDbEnumerator();
            DataTable dtprd = enu.GetElements();
            // Linq
            var qr = from r in dtprd.AsEnumerable()
                     where r.Field<string>("SOURCES_NAME") == accdbPrd
                     select r;
            if (qr.Count() == 0)
                MessageBox.Show("唉,还没安装相关的提供程序。");
            else
                MessageBox.Show("可以连接数据库了。");

二、如何连接.accdb文件

这个在上面说过了,只要把连接字符串中的Provider改为Microsoft.ACE.OLEDB.12.0就可以了,或者参考上面老周给的那个网站的信息,反正这个你都会的。

三、关于|DataDirectory|占位符

Data Source设置的是数据库文件的路径,为了方便,通常会这样写:Data Source= |datadirectory|\\mydb.accdb。DataDirectory占位符是不区分大小写的。默认条件下,对于Web项目,datadirectory指向项目目录下的App_Data,这是ASP.NET的惯例,老周不多介绍了。对于其他应用而言,datadirectory指向应用程序运行的目录,如果程序是在\bin\debug目录下运行,那么数据目录就是\bin\debug。

不过呢,datadirectory是可以更改的,下面例子把数据目录改为当前登录用户的“文档”目录。

            string docpath = Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments);
            AppDomain.CurrentDomain.SetData("DataDirectory", docpath);

调用AppDomain的SetData方法就可以修改|datadirectory|占位符所指向的数据目录。现在我把.accdb文件放到我的用户名下的“文档”下,即C:\Users\<my name>\Documents。

接着连接字符串可以这样写:

Provider=Microsoft.ACE.OLEDB.12.0;Data Source=|DataDirectory|\\pigstore.accdb

实际指向的文件路径为:C:\Users\<my name> \Documents\pigstore.accdb。

好了好了,有用的东西就讲到这里了,没用的话老周已省略,本文就写到这里了,该去填肚子了。

时间: 2024-10-16 21:53:17

【.net 深呼吸】连接Access数据库应注意的几点的相关文章

C#连接Access数据库(详解)

做一个用VS2012的C#连接Access数据库的备忘, SQL数据库固然强大,有大微软的强力技术支持,LINQ的方便操作,但是如果写一个小程序对数据库方面没有什么大的要求的话,将来在数据库方面就可以选择使用access数据库,这样就能省去一定的开支. 首先,我们建一个数据库,因为大家使用的office版本不同,有用2000的有用2003的还有用 2007或者2010的.我用的是2007,但是无论用哪个版本请把建的数据库建为.mdb结尾的2003版本的不要建 .accdb结尾的. 建一个表,请先

64位Winows2008下连接Access数据库 Jet4.0不支持解决代替方案

如何在windows2008 64位的机子上连接Access数据库 用以前的连接Access数据库的方式Provider=Microsoft.Jet.OLEDB.4.0在32位机子上可以使用,在64位上不能使用,可以使用代替方案-微软Access数据库引擎2010下载安装后 更改使用下面的连接串可以解决. Microsoft Access データベース エンジン 2010 (微软Access数据库引擎2010)    AccessDatabaseEngine_X64.exe 下载 http://

使用JDBC-ODBC连接Access数据库

使用JDBC-ODBC桥连接ACCESS数据库有两种方式:(1)配置ODBC数据源:(2)不配置ODBC数据源. 如果数据库文件为 person.mdb,路径为:G:\ProgramFiles\MyEclipse 6.5\workspace\JdbcOdbcTest\src\ person.mdb.配置的数据源名称为:person. (1)  配置ODBC数据源: 打开ODBC数据源管理器,在"系统DSN(或者用户DSN)"选项卡里面点击"添加"按钮. 在"

具体解释VB中连接access数据库的几种方法

在VB中,连接ACCESS数据库的方法主要有以下三种 使用ADO对象,通过编写代码訪问数据库 Connection 对象 ODBC数据源 使用ADO Data 控件高速创建数据库连接 有三种连接方法 Data Link文件 使用ODBC数据源名称 使用连接字符串 使用数据环境设计器创建数据库连接 首先加入环境引用. 然后找到数据源进行连接 不管是哪一种连接,都是先有一个路径,通向要连接的数据源,和数据源建立关系,在连接.就好比从北京到上海,能够做汽车,能够做火车,还能够做飞机,汽车走快速,火车走

Java连接Access数据库的那些坑

Java 使用 JDBC 连接Access数据库 需要掌握的技能 1.Java SE基本技术 2.懂点JDBC技术 能够学到如何使用Java正确的连接JDBC 环境 window8.1 64位 jdk6 32位 Access 2013 Eclipse 4.4 下面是代码 package com.malin.app; import java.sql.Connection; import java.sql.DriverManager; import java.sql.ResultSet; impor

ASP.net分别连接SQLserver数据库与连接Access数据库精英版

-------------------------连接access2003 字符串------------------------- Provider=Microsoft.Jet.OLEDB.4.0;Data Source=|DataDirectory|\Data.mdb 连接access2010 字符串 Provider=Microsoft.ACE.OLEDB.12.0;Data Source=|DataDirectory|\aa.accdb -------------------------

[易语言]连接ACCESS数据库学习

一.支持库配置 工具-支持库配置-数据库操作支持库 二.添加控件 启动窗口添加控件(数据库连接/记录集/超级列表框) 三.数据库连接 数据库连接1.连接Access ("数据库文件路径", "数据库密码") 例:数据库连接1.连接Access (取运行目录 () + "H:\m.mdb", "") 四.定义变量 .局部变量 索引, 整数型 .局部变量 用户ID, 整数型 .局部变量 日期时间, 文本型 五.例子 .支持库 eD

C#连接Access数据库

C#连接Access数据库 Microsoft Office Access是由微软发布的关系数据库管理系统.它结合了 MicrosoftJet Database Engine 和 图形用户界面两项特点,是 Microsoft Office 的系统程序之一. 对于许多小型的软件,使用access数据库是一个不错的选择,下面我就简单介绍使用C#来连接数据库.  第一步:  我们在vs2015中建立一个项目,命名为AccessTest.   项目建立  第二步: 新建Access数据库文件,命名为te

c#.net连接access数据库

c#.net连接access数据库 前期工作:创建一个access数据库,名为yonghu.mdb ,表明yonghu,字段为user_id,user_pwd PS:如何新建access数据库:左上角菜单按钮->新建->点右下角起名字文件夹(保存类型选2002-2003数据库)->(yonghu)确定->打开access->左上角试图按钮->设计试图->起表名字(yonghu)->字段填user_id类型文本,字段user_pwd类型文本->切换到数据