Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sqlite/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C#AutoCAD插件SQLite-很少出现错误表_C#_Sqlite_Path_Relative Path_Autocad - Fatal编程技术网

C#AutoCAD插件SQLite-很少出现错误表

C#AutoCAD插件SQLite-很少出现错误表,c#,sqlite,path,relative-path,autocad,C#,Sqlite,Path,Relative Path,Autocad,我正在为AutoCAD创建一个使用外部数据库(SQLite)的插件。 在极少数情况下,我会出现“未找到表”错误。这快把我逼疯了。我已经看到了很多论坛的答案无法找到解决方案 它在大多数情况下都能工作,只有少数情况下会抛出此错误 我如何解决这个问题 我使用的是数据库的相对路径,它位于Debug/release文件夹中 将数据库附加到应用程序的最佳方法是什么(在我的例子中是.dll而不是exe) 谢谢你们的回复…对不起,我没有收到任何电子邮件通知 这是您要求的信息。 我有一个单独的类来处理连接。 下

我正在为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的位置,而不是插件的位置

  • 如何获取插件位置的绝对路径以获取DB的位置(因为DB和.dll位于同一文件夹中)
  • 如何在连接字符串中同时使用绝对路径和相对路径(因此,如果相对路径失败,代码可以尝试使用绝对路径定位数据库)
  • 任何其他建议都很好。谢谢


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


    只有在中间关闭应用程序窗口时,才会出现错误。如果我尝试运行应用程序,为DB打开的连接似乎仍然繁忙。使用获取插件路径

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

    为什么不走另一条路呢

    与其尝试查找DLL和关联的SQLite数据库,我建议您将它们安装在特定位置。通过这种方式,您可以轻松地将其与安装程序打包

    您可以使用注册表项通过AutoCAD自动加载.NET模块:


    这样,您就可以像安装普通程序一样简单地安装AutoCAD插件,并让AutoCAD在启动时为您加载它们。

    您如何使用相对路径?显示代码!显示出现错误的代码段。是否使用app.config文件?谢谢,我想这就是我将用于最终部署的部分。只是一个简单的问题。当安装程序部署我的插件时,它会进入默认的autodesk Appdata文件夹。如何使用.netI获取用户的应用程序数据文件夹我通常会将插件安装到
    C:\CadUtils
    。如果确实要安装到用户的
    AppData
    目录,可以访问环境变量(
    %AppData%
    ,在命令提示下)以找到它。