C# AutoCAD 插件 SQLite - 在极少数情况下找不到错误表

标签 c# sqlite path relative-path autocad

我正在为 AutoCAD 创建一个插件,它使用外部数据库(SQLite)。 在极少数情况下,我会收到“找不到表”错误。这让我疯狂。我看了很多论坛的答案都找不到解决方案。

它在大多数情况下都能工作,只有少数情况下会抛出此错误。

如何解决这个问题。

我使用的是数据库的相对路径,它位于 Debug/release 文件夹中。

将数据库附加到应用程序的最佳方法是什么(在我的例子中是 .dll 而不是 exe)

<小时/>

谢谢大家的回复...抱歉我没有收到任何电子邮件通知...

这是您请求的信息。

我有一个单独的类来处理连接。 这是我连接到数据库的方式。

    public static SQLiteConnection GetConnection()
    {
        string conn_string = string.Format("Data Source=./sdf_db1.s3db");
        SQLiteConnection conn = new SQLiteConnection(conn_string);

        if (!System.IO.File.Exists("./sdf_db1.s3db"))
        {
            Global.variables.mess_out_exception("Missing Database file", "Error");
        }

        return conn;

    }

由于这是 AutoCAD Civil3D 的插件,因此它驻留在 Appdata\autodesk 文件夹中以在启动时加载。该应用程序的所有内容都运行良好,除了很少出现找不到表格的错误。看起来可能是应用程序启动时相对路径无法快速解析。

如果我尝试使用“Application.ExecutablePath;”,我很难找到绝对路径。以及我在网上找到的其他一些东西..我得到的只是 Acad.exe 的位置而不是插件的位置。

  1. 如何获取插件位置的绝对路径来获取数据库的位置(因为数据库和.dll位于同一文件夹中)。
  2. 如何在连接字符串中同时使用绝对路径和相对路径(因此,如果相对路径失败,代码可以尝试使用绝对路径来定位数据库)。

任何其他建议都会很棒。谢谢

<小时/>

我找到了问题的原因, 当我运行应用程序并正确关闭应用程序时(意味着完成所有过程后),它工作正常,我没有收到任何错误消息...

仅当我关闭应用程序的窗口时才会出现错误。如果我尝试运行应用程序,为数据库打开的连接似乎仍然繁忙。

最佳答案

获取插件的路径

var asmpath = Path.GetDirectoryName( Assembly.GetExecutingAssembly().Location );

关于C# AutoCAD 插件 SQLite - 在极少数情况下找不到错误表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13794783/

相关文章:

android - 使用 CursorLoader 查询 SQLite 数据库并填充 AutoCompleteTextView

java - 使用绝对路径时无法从 cmd 找到或加载主类

tfs - 如何更改 TFS 中子文件夹的本地路径(不是整个工作区)?

c# - MVVM 基础 View 模型类

C#/NHibernate - 获取按分组总和排序的前 10 条记录

c# - Azure 移动应用程序离线 SQLite 同步卡在初始化上

c# - 在两个模型之间创建 ManyToMany 关系

android - 从文件选择器获取音频文件Uri

c# - 使用 MongoRepository 的多个数据库

c# - 在 C# 中扫描并另存为 PDF