You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

求助:Microsoft.ACE.OLEDB.12.0未注册错误,改x86无效

解决"Microsoft.ACE.OLEDB.12.0未在本地机器注册"问题(原x86架构修复失效场景)

问题背景

此前通过将项目CPU架构从Any改为x86可解决该驱动未注册错误,但当前方案失效,代码基于.NET 6+System.Data.OleDb 7.0.0,5天前可正常运行,现报错:

"System.InvalidOperationException: 'The 'Microsoft.ACE.OLEDB.12.0' provider is not registered on the local machine.'"

排查与修复步骤

  • 重新确认全架构配置
    仅修改项目CPU架构可能被解决方案配置覆盖:右键解决方案→属性→配置属性→配置管理器,确保活动解决方案平台和所有关联项目的平台均设置为x86,保存后重新编译运行。

  • 重装匹配版本的ACE驱动
    驱动可能因系统更新或损坏失效,需安装32位版本(即使系统是64位,因为程序以x86运行):

    1. 下载32位的Microsoft Access Database Engine 2010 Redistributable
    2. 若提示已安装更高版本,以管理员身份打开命令提示符,执行安装包路径+/passive参数(如AccessDatabaseEngine.exe /passive)完成被动安装。
  • 规避OneDrive路径影响
    代码存储在OneDrive,可能因同步锁或权限限制导致数据库访问异常:将数据库文件复制到非OneDrive本地目录(如C:/Users/kiera/Documents/),修改ConnectionString中的数据源路径后测试。

  • 重置NuGet包缓存
    即使未修改OleDb版本,缓存损坏可能引发兼容性问题:右键项目→管理NuGet程序包→已安装→卸载System.Data.OleDb,清理NuGet缓存(工具→NuGet包管理器→管理解决方案的NuGet程序包→设置→清除所有缓存)后重新安装该包。

代码优化建议(额外)

当前INSERT语句存在严重SQL注入风险,需改用参数化查询:

private void btnAdd_Click(object sender, EventArgs e)
{
    string connectionString = @"Provider=Microsoft.ACE.OLEDB.12.0; Data Source=C:/Users/kiera/Documents/dbNumber2.accdb";
    using (OleDbConnection connection = new OleDbConnection(connectionString))
    {
        connection.Open();
        string encryptUser = EncryptString(tbUsername.Text);
        string encryptPassword = EncryptString(tbPassword.Text);
        string regSQL = "INSERT INTO Users ([Username], [Password]) VALUES (@Username, @Password)";
        using (OleDbCommand cmd = new OleDbCommand(regSQL, connection))
        {
            cmd.Parameters.AddWithValue("@Username", encryptUser);
            cmd.Parameters.AddWithValue("@Password", encryptPassword);
            cmd.ExecuteNonQuery();
        }
    }
}

使用using语句可确保连接自动释放,避免因异常导致连接未关闭的问题。

内容的提问来源于stack exchange,提问作者Kieran

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.31 15:21:02