microsoft.jet.OLEDB4​​提供程序未在本地计算机

时间:2015-05-05 11:25:32

标签: c# winforms ms-access ado.net oledbconnection

我正在尝试使用Visual Studio 2013开发一种Windows窗体应用程序。

在我的项目中,我有这样的代码:

public class AccessFile
{
    string strconnection = @"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=AccessTemp.mdb";
    private void InsertSellItems(List<TTMSModel> lstttms )
    {
        try
        {
            foreach (TTMSModel t in lstttms)
            {
                if (t.TypeMember == "حقیقی") t.TypeMember = "1";
                else
                {
                    t.TypeMember = "2";
                }
                OleDbConnection objconnection = new OleDbConnection(strconnection);
                OleDbCommand objcommand = new OleDbCommand("INSERT INTO Foroush_Detail" +
                                                           "(KalaKhadamatName,KalaCode,BargashtType,Price,MaliatArzeshAfzoodeh,AvarezArzeshAfzoodeh,HCKharidarTypeCode,KharidarPostCode,KharidarPerCityCode,KharidarTell,KharidarAddress,KharidarName,KharidarLastNameSherkatName,KharidarEconomicNO,KharidarNationalCode,HCKharidarType1Code,CityCode,stateCode,IsSent,Sarjam)" +
                                                           "VALUES('فروش'," +"'0'"+",'0','"+t.PriceAmount+"','"+t.MayorAmount+"','"+t.TaxAmount+"','"+t.TypeMember+"','"+t.ZipCode+"','"+t.City+"','"+t.PhoneNumber+"','"+t.Address+"','"+t.Name+"','"+t.Name+"','"+t.EconomicNumber+"','"+t.IntNumber+"','2','"+t.City+"','"+t.Province+"','0','0')",
                                                           objconnection);
                objconnection.Open();
                objcommand.ExecuteNonQuery();
                objconnection.Close();
            }
        }
        catch (OleDbException a)
        {
        }
    }

所以一切正常。我的操作系统是Windows 7 64位。因此,当我尝试运行此代码时,我收到此错误:

  

microsoft.jet.OLEDB4​​提供程序未在本地计算机上注册

如果能给我一些帮助,我将不胜感激?

3 个答案:

答案 0 :(得分:4)

如果您的Microsoft Access版本是2003,请将其升级到更新版本,并阅读以下文章 - 我添加以下摘要 - 。

  

使用Microsoft Access 2010进行数据编程

     

摘要:了解如何使用Microsoft Office Access 2007或Microsoft Access 2010开发本机(C,C ++,Java,VBA)或托管(C#,Visual Basic.NET)数据访问代码。了解Access体系结构,ACE引擎和数据提供程序,32位和64位平台,以及为新旧数据库项目选择最佳数据访问技术时需要考虑的事项。

     

适用于: Access 2007 |访问2010 | Office 2010

  

在Access 2007之前,Access使用了Microsoft联合引擎技术(JET)引擎。尽管JET通常被视为Access的一部分,但JET引擎曾经是一个单独的产品。自Microsoft Windows 2000发行版以来,JET作为Windows操作系统的一部分包含在内,然后使用Microsoft数据访问组件(MDAC)进行分发或更新。但是,在Access 2007版本中,不推荐使用JET引擎,并且不再随MDAC一起分发。相反,Access现在使用集成和改进的ACE引擎,通过获取原始JET代码库的代码快照开始开发。

重要的相关部分是:

  

Access 2007产品的ACE提供程序(ACE DAO,ACE OLE DB或ACE ODBC)仅在 32位中可用。适用于Access 2010产品的ACE提供程序提供 32位 64位版本。

您知道需要为Access 2010提供ACE提供程序。

要使用它,您需要一个新的connection string,例如Access 2010:

标准安全

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;

Microsoft Access Database Engine 2010 Redistributable下载。

答案 1 :(得分:3)

使用Accdb而不是mdb并从此位置安装64位驱动程序。

连接字符串将是:

"Provider=Microsoft.ACE.OLEDB.12.0; Data Source= yourdbname ;Jet OLEDB:Database Password=yourpassword;"

您需要在64位操作系统上安装64位驱动程序,在32位操作系统上安装32位驱动程序。

Download Access drivers

答案 2 :(得分:2)

您的整个项目必须设置为针对x86平台进行编译。 Microsoft Jet数据库(Microsoft.Jet.OLEDB提供程序)所需的程序集可用于32位 。只有(并且根据微软,从未有过)没有64位版本。这就是为什么您的应用程序在为x64编译时无法找到Microsoft.Jet.OLEDB的原因。您唯一的选择是将应用程序(以及所有相关程序集)切换到32位(x86平台)。