我正在为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的位置而不是插件的位置。
任何其他建议都会很棒。感谢
我找到了问题的原因, 当我运行应用程序并正确关闭应用程序(完成所有过程后的意思)它工作正常我没有收到任何错误消息...
答案 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在启动时为您加载它们。