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

Revit插件调用OleDbConnection.Open()连接Access(accdb)时程序崩溃如何解决

Revit插件调用Access数据库Open时崩溃问题解决方案

问题复现

开发小型Revit插件时,通过C#调用Access数据库,执行OleDbConnection.Open()方法时程序直接崩溃,相关代码如下:

CPFMainModelView mainModelView;
static readonly string connectionString = @"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\Users\ThomasLECUPPRE(Letit\source\LIB_MainDB.accdb";

public UserDBManager(CPFMainModelView cmmw)
{
    mainModelView = cmmw;
    try
    {
        RetrieveprojectList();
    }
    catch (Exception ex)
    {
        mainModelView.Texte = $"{ex.Message}\n\n{ex.StackTrace}\n\n{ex.InnerException}\n\n{ex.Data}";
    }

}

public void RetrieveprojectList()
{
    using (OleDbConnection con = new OleDbConnection(connectionString))
    {
        con.Open();
        OleDbCommand command = new OleDbCommand("SELECT Ref FROM FolderCategory", con);
        OleDbDataReader reader = command.ExecuteReader();
        while (reader.Read())
        {
            mainModelView.Texte += $"\n{reader["Ref"]}";
        }
    }
}

此前已尝试调整数据库驱动为Microsoft.Jet.OLEDB.4.0+Any CPU编译,出现驱动未注册报错,调整为Microsoft.ACE.OLEDB.12.0+X86编译后仍未解决。

问题排查与修复方案

  • 修复连接字符串错误
    现有连接字符串存在两处语法问题:一是数据源路径的用户名部分括号不闭合,ThomasLECUPPRE(Letit应为ThomasLECUPPRE(Letit);二是连接字符串缺少闭合配置项,修正后的连接字符串如下:
    static readonly string connectionString = @"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\Users\ThomasLECUPPRE(Letit)\source\LIB_MainDB.accdb;Persist Security Info=False;";
    
  • 匹配编译平台与运行环境
    Revit 2017及更高版本均为64位程序,X86编译生成的32位插件无法被64位Revit加载。请将解决方案平台调整为X64,同时安装对应64位版本的Microsoft Access Database Engine驱动,确保程序架构与驱动版本一致。
  • 补充异常捕获与线程调度
    当前仅在构造函数层捕获异常,若mainModelView.Texte的赋值操作在非UI线程执行,会触发Revit UI线程访问异常。建议将数据库查询逻辑与UI更新逻辑拆分,查询完成后通过Revit API的IExternalEventHandler接口调度到UI线程更新界面内容,避免跨线程操作崩溃。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 23:15:04