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

时间:2012-12-10 03:57:30

标签: sqlite path relative autocad

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

它在大多数情况下只处理它会引发此错误的几个实例。

如何解决此问题。

我正在使用DB的相对路径,它位于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. 如何获取插件位置的绝对路径以获取DB的位置(因为DB和.dll位于同一文件夹中)。
  2. 如何在连接字符串中使用绝对路径和相对路径(因此,如果相对路径失败,代码可以尝试使用绝对路径来定位数据库)。
  3. 任何其他建议都会很棒。感谢


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

    只有在我关闭其间的应用程序窗口时才会出现错误。如果我尝试运行应用程序,看起来为DB打开的连接仍然很忙。

2 个答案:

答案 0 :(得分:1)

使用

获取插件的路径
var asmpath = Path.GetDirectoryName( Assembly.GetExecutingAssembly().Location );

答案 1 :(得分:1)

为什么不采取替代路线?

我建议您将它们安装在特定位置,而不是尝试查找您的DLL和关联的SQLite数据库。这样您就可以使用安装程序轻松打包它。

您可以通过AutoCAD使用注册表项自动加载.NET模块: http://through-the-interface.typepad.com/through_the_interface/2006/09/automatic_loadi.html

通过这种方式,您只需将AutoCAD插件安装为普通程序,然后让AutoCAD在启动时为您加载它们。