【发布时间】:2014-09-17 19:16:15
【问题描述】:
The 'Microsoft.ACE.OLEDB.12.0' provider is not registered on the local machine.
我知道常见的解决方法是安装:
Microsoft Access Database Engine 2010 Redistributable
或者
2007 Office System Driver: Data Connectivity Components
两者都安装在我的本地 PC 上。这是我的代码
OleDbConnection conn = new OleDbConnection();
string fileName = "test.xlsx";
try
{
string connectString = String.Format(
"Provider=Microsoft.ACE.OLEDB.12.0;Data Source={0};Extended Properties='Excel 12.0 Xml;HDR={1};'",
fileName, "YES");
conn.ConnectionString = connectString;
conn.Open(); //exception is thrown here !!!
OleDbCommand comm = new OleDbCommand();
comm.CommandText =
string.Format("CREATE TABLE [{0}] ", "Test");
comm.Connection = conn;
comm.ExecuteNonQuery();
OleDbDataAdapter ad = new OleDbDataAdapter(
string.Format("SELECT * FROM [{0}]", "Test"), conn);
OleDbCommandBuilder builder = new OleDbCommandBuilder(ad);
}
catch(Exception ex)
{
throw ex;
}
finally
{
conn.Close();
}
我在本地机器上的其他项目中尝试此代码,一切正常。我有创建 excel 导出的项目,我没有这个问题。
问题出在项目中,我不明白如何解决它。同样在当前项目中,我创建了一个新的 .aspx 页面,并且在 Page_Load 中只放置了这段代码,同样的异常。
附加信息:此项目是在 vs 2008 上编写的,转换为 2010 年,之后用于 vs 2012 年。到目前为止,该项目的一切正常。
JET 连接字符串也一样!
编辑
在Joe的回答之后,我看到这个项目是在64bitProcess上运行的:
bool test = Environment.Is64BitProcess; //return true.
我的驱动程序是 32 位的。我现在能做什么,能不能改变环境进程。我安装了 Office 2010 x32,无法安装 64 位进程的驱动程序。
【问题讨论】:
-
很可能与项目属性/构建/平台目标有关——通常使用 Any 是最好的,但有时您需要选择 x86 或 x64 来让 .NET 加载正确位数的程序集
-
@MatthewMartin 我加载 x64 重建并出现同样的问题。
-
您的驱动程序是 64 位的吗?如果没有,则选择 x86。
-
@LarsTech 如果我尝试将 x86 放入项目未加载,我将编辑异常。他们想更改注册键值,但我还找不到这个注册表。
标签: c# visual-studio oledbconnection