我正在尝试使用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提供程序未在本地计算机上注册
如果能给我一些帮助,我将不胜感激?
答案 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;
答案 1 :(得分:3)
使用Accdb而不是mdb并从此位置安装64位驱动程序。
连接字符串将是:
"Provider=Microsoft.ACE.OLEDB.12.0; Data Source= yourdbname ;Jet OLEDB:Database Password=yourpassword;"
您需要在64位操作系统上安装64位驱动程序,在32位操作系统上安装32位驱动程序。
答案 2 :(得分:2)
您的整个项目必须设置为针对x86平台进行编译。 Microsoft Jet数据库(Microsoft.Jet.OLEDB提供程序)所需的程序集可用于32位 。只有(并且根据微软,从未有过)没有64位版本。这就是为什么您的应用程序在为x64编译时无法找到Microsoft.Jet.OLEDB的原因。您唯一的选择是将应用程序(以及所有相关程序集)切换到32位(x86平台)。