2012-12-24 84 views
7

我正在使用Microsoft Access创建我的数据库。这里是我的代码:如何在C#中打开与Microsoft Access数据库的连接

static string Constr = "Provider=Microsoft.Jet.OLEDB.4.0;" 
        + "Data Source = MyData.accdb"; 
OleDbConnection Conn = new OleDbConnection(Constr); 
DataSet DataSet1 = new DataSet(); 
string SQLstr = "Select * from Tabel"; 
OleDbDataAdapter DataAdapter1; 
Conn.Open(); 

我得到这个异常:

类型 'System.Data.OleDb.OleDbException' 未处理的异常出现在system.data.dll

附加信息:无法识别的数据库格式

+8

http://www.connectionstrings.com/access-2007 – SLaks

+0

你创建的MS Access数据库的版本是什么? –

+0

我正在使用MS Access 2010 –

回答

7

您试图打开使用Access 2007/2010(accdb)创建的Access数据库,使用OleDb提供程序n仅了解使用Access 2003创建的MDB文件

要使用的提供程序是Microsoft.ACE.OleDB.12.0应该已安装在最新版本的Office中。

另外,您可以从Microsoft Access Database Engine
下载适当的位。请注意下载适用于您使用的平台(x86或x64)的版本。

这就是使用

Provider=Microsoft.ACE.OLEDB.12.0;Data Source=MyData.accdb"; 

注意连接字符串:请记住,如果你有安装Office,相应的提供了Office的同位数,因此与Office 64位而来的ACE在64位版本和32bit一样。这种情况在部署您的应用程序时构成了一个非常棘手的问题。您需要让应用程序以相同的位数进行编译,否则您将无法使用安装的提供程序。 (或者卸载不兼容的Office版本并重新安装兼容的版本。当然,如果您应该能够说服您的客户该Office是不兼容的应用程序:-)

+0

我已将我的字符串编辑为静态字符串Constr =“Provider = Microsoft.ACE.OLEDB.12.0; Data Source = MyData.accdb”;'我得到此异常'未处理System.Data.dll中发生类型'System.InvalidOperationException'异常 其他信息:'Microsoft.ACE.OLEDB.12.0'提供程序未在本地计算机上注册。' –

+1

这可能是由ACE驱动程序造成的已安装或安装了32位驱动程序,但您的应用程序已针对AnyCPU进行编译,并且您正在64位操作系统上运行。您是否在64位操作系统上安装了32位Office? – Steve

相关问题