我正在为 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 的位置而不是插件的位置。
- 如何获取插件位置的绝对路径来获取数据库的位置(因为数据库和.dll位于同一文件夹中)。
- 如何在连接字符串中同时使用绝对路径和相对路径(因此,如果相对路径失败,代码可以尝试使用绝对路径来定位数据库)。
任何其他建议都会很棒。谢谢
<小时/>我找到了问题的原因, 当我运行应用程序并正确关闭应用程序时(意味着完成所有过程后),它工作正常,我没有收到任何错误消息...
仅当我关闭应用程序的窗口时才会出现错误。如果我尝试运行应用程序,为数据库打开的连接似乎仍然繁忙。
最佳答案
获取插件的路径
var asmpath = Path.GetDirectoryName( Assembly.GetExecutingAssembly().Location );
关于C# AutoCAD 插件 SQLite - 在极少数情况下找不到错误表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13794783/