c#连接access 2007连接字符串

来源:互联网 发布:玲珑醉梦网络剧百度云 编辑:程序博客网 时间:2024/05/17 02:57
c#连接access 2007连接字符串

以前写网页都是用的ACCESS2003数据库,连接字符串也通常是以下两种:

一:connstr="DBQ="+server.mappath("数据库名")+";DefaultDir=;DRIVER={Microsoft Access Driver (*.mdb)}
二、provider=Microsoft.Jet.OLEDB.4.0;data source="&Server.MapPath("数据库名")

这次重装系统后我装上了ACCESS2007,在生成数据库时,我就发现没有了MDB的数据库格式,生成后我把它名改成了MDB(有点搞笑哦,我习惯了用MDB后缀的)。

按第一种方法,在连接时数据库出现错误:Microsoft OLE DB Provider for ODBC Drivers (0x80004005) 
[Microsoft][ODBC Microsoft Access Driver]常见错误 不能打开注册表关键字 'Temporary (volatile) Jet DSN for process 0x404 Thread 0x92c DBC 0x16764c4 Jet';按网上搜的帖子处理方法,我把目录的所有权限全部加上也是一样的错误提示。

换成第二种方法,出现这种提示:不可识别的数据库格式 'F:\web\bfzz\admin\data\data.mdb';我是用ACCESS2007生成的数据库,我把后缀名改成默认的ACCDB,,错误依然。今天在网上搜ACCESS2007连接字符串,才发现是2007数据库格式发生了变化,已经不能用再使用以上两种方法连接数据库了,应换成Provider=Microsoft.ACE.OLEDB.12.0;Data Source=“数据库名”。注意和以前的access ADO连接字符串几个三个明显不同的地方: 
Provider部分由Microsoft.Jet.OLEDB变成了Microsoft.ACE.OLEDB 
以前的jet4是连接不上的; 
驱动版本号由4.0变成了12.0 
数据库的扩展名变为accdb而非mdb。
2003:Provider=Microsoft.Jet.OLEDB.4.0;Data Source=XXX.mdb
2007:Provider=Microsoft.ACE.OLEDB.12.0;Data Source=XXX.accdb;

以前,用ASP连接Access数据库,连接字串可以这样写:
Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\myFolder\*.mdb ;Persist Security Info=False;
但是自从有了Access07和Access10,Access数据库的扩展名也由*.mdb改为了*.accdb,如果再使用上述连接Access2007的话就会报出"不可识别的数据库格式"异常,是什么原因呢?下面简要说下具体原因。
大家知道,Microsoft.Jet.OLEDB.4.0的Oledb的数据库连接方式很早就推出了,也算是比较老的连接方式了,而2007年以后的Oledb连接方式已经被微软改成了Microsoft.ACE.OLEDB.12.0,所以接着上述的连接语句来说,也要做出改动才可以,换成这样就可以了:
Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\myFolder\*.accdb;Persist Security Info=False;
一个小窍门:
在asp.net中经常把连接字符串写在web.config中。但是access的连接字符串是需要数据库的绝对位置。即盘符:/文件夹/文件 这样就导致经常把文件拷贝后需要改路径的问题。其实完全可以通过程序来获得数据库文件的绝对路径。具体如下:
web.config中只写数据库文件名 (一般会把数据库文件放在App_Data文件夹下,因为有一定的安全性)
<appSettings> <add key="ConnString" value="App_Data\ManageDB.accdb"/> </appSettings>
然后在DBHelper类获得字符串时写上如下方法:
public static string connectionString = "Provider=Microsoft.ACE.OLEDB.12.0; Data Source=" + AppDomain.CurrentDomain.BaseDirectory + ConfigurationSettings.AppSettings["ConnString"];
通过AppDomain.CurrentDomain.BaseDirectory来获得此数据库的绝对路径。

[示例代码]
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Data.OleDb;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace winform01
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void btnCheckAccess_Click(object sender, EventArgs e)
        {
            string strConnectionString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=D:\\CSE_DEPT.accdb;Persist Security Info=False;";
            OleDbConnection accConnection = new OleDbConnection(strConnectionString);
            try
            {
                accConnection.Open();
            }
            catch (OleDbException e1)
            {
                MessageBox.Show("Access Error");
                MessageBox.Show("Error Code=" + e1.ErrorCode);
                MessageBox.Show("Error Message=" + e1.Message);
            }
            catch(InvalidOperationException e1)
            {
                MessageBox.Show("Invalid Message=" + e1.Message);
            }
            if(accConnection.State!=ConnectionState.Open)
            {
                MessageBox.Show("Database connection is Failed");
                Application.Exit();
            }
            else
            {
                MessageBox.Show("Database connection is Success!");
                Application.Exit();
            }
        }
    }
}

未在本地计算机上注册“microsoft.ACE.oledb.12.0”提供程序解决办法 
错误信息:未在本地计算机上注册“microsoft.ACE.oledb.12.0”提供程序。
解决办法:
去http://download.microsoft.com/download/7/0/3/703ffbcb-dc0c-4e19-b0da-1463960fdcdb/AccessDatabaseEngine.exe下载。然后安装就行了。

本错误是由于你使用了ACCESS2007版本建立的数据库,但服务器中没有相配合使用的程序,所以出错.

 未在本地计算机上注册“microsoft.ACE.oledb.12.0”提供程序。
说明: 执行当前 Web 请求期间,出现未处理的异常。请检查堆栈跟踪信息,以了解有关该错误以及代码中导致错误的出处的详细信息。 

异常详细信息: System.InvalidOperationException: 未在本地计算机上注册“microsoft.ACE.oledb.12.0”提供程序。

下载2007 Office system 驱动程序:数据连接组件安装

http://download.microsoft.com/download/7/0/3/703ffbcb-dc0c-4e19-b0da-1463960fdcdb/AccessDatabaseEngine.exe

此下载将安装一组组件,非 Microsoft Office 应用程序可以使用它们从 2007 Office system 文件中读取数据,
例如从 Microsoft Office Access 2007(mdb 和 accdb)文件以及 Microsoft Office Excel 2007(xls、xlsx 和 xlsb)文件中读取数据。
这些组件还支持与 Microsoft Windows SharePoint Services 和文本文件建立连接。

此外,还会安装 ODBC 和 OLEDB 驱动程序,供应用程序开发人员在开发与 Office 文件格式连接的应用程序时使用。
---------------------------------------------------------------------------------------------------------------------------------------------------
使用此下载:
如果您是应用程序用户,请查阅应用程序文档以获得有关如何使用相应的驱动程序的详细信息。
 
如果您是使用 OLEDB 的应用程序开发人员,请将 ConnectionString 属性的 Provider 参数设置为“Microsoft.ACE.OLEDB.12.0”
如果要连接到 Microsoft Office Excel 数据,请将“Excel 12.0”添加到 OLEDB 连接字符串的扩展属性中。
 
如果您是使用 ODBC 连接到 Microsoft Office Access 数据的应用程序开发人员,
请将连接字符串设置为“Driver={Microsoft Access Driver (*.mdb, *.accdb)};DBQ=path to mdb/accdb file”
 
如果您是使用 ODBC 连接到 Microsoft Office Excel 数据的应用程序开发人员,
请将连接字符串设置为“Driver={Microsoft Excel Driver (*.xls, *.xlsx, *.xlsm, *.xlsb)};DBQ=path to xls/xlsx/xlsm/xlsb file”
 
详情:http://www.microsoft.com/downloads/zh-cn/details.aspx?displaylang=zh-cn&FamilyID=7554f536-8c28-4598-9b72-ef94e038c891

或者:
解决办法1 (验证可以了)
  选择 该应用程序的 应用程序池 ------>选择高级设置 --------->启用32位应用程序 ------->true  
 
解决办法2
  Microsoft.ACE.OLEDB.12.0是不能再x64上使用的,你要强制把你的web application编译成x86再发布到Win08 x64上,记得在Application pool上设置Enable 32bit Application = true。
(没有验证)
winform
环境:
Win7 64位
Office 2007
NET WinForm应用程序,连接Access2007是,总是报
”未在本地计算机上注册“Microsoft.ACE.OLEDB.12.0”提供程序“ 错误。
解决办法:项目属性-生成-目标平台 选择 X86。
默认:Any CPU 报错,X64 也报错。
0 0
原创粉丝点击