外部データベース(SQLite)を使用するAutoCAD用のプラグインを作成しています。まれに、「テーブルが見つかりません」というエラーが発生することがあります。それは私を夢中にさせます。私は答えのためのフォーラムをたくさん見ましたが、解決策を見つけることができませんでした。
ほとんどの場合、このエラーをスローするインスタンスはごくわずかです。
この問題を解決するにはどうすればよいですか。
DBへの相対パスを使用していますが、これはDebug/releaseフォルダー内にあります。
dbをアプリケーションに接続するための最良のアプローチは何ですか(私の場合、exeではなく.dllです)
返信ありがとうございます...申し訳ありませんが、メール通知が届きませんでした...
これがあなたが要求した情報です。
接続を処理する別のクラスがあります。これが私がDBに接続する方法です。
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;
}
これはAutoCADCivil3Dのプラグインであるため、起動時にロードするためにAppdata\autodeskフォルダにあります。テーブルが見つからないというエラーが発生することはめったにありませんが、アプリに関するすべてがうまく機能しています。アプリケーションの起動時に相対パスをすばやく解決できない可能性があります。
「Application.ExecutablePath;」を使用しようとすると、絶対パスを見つけるのが困難になります。そして私がオンラインで見つけた他のいくつかのもの..私が得るのはプラグインの場所ではなくAcad.exeの場所だけです。
- プラグインの場所の絶対パスを取得してDBの場所を取得するにはどうすればよいですか(DBと.dllは同じフォルダーにあるため)。
- 接続文字列で絶対パスと相対パスの両方を使用するにはどうすればよいですか(相対パスが失敗した場合、コードは絶対パスを使用してデータベースを見つけようとします)。
他の提案は素晴らしいでしょう。ありがとう
問題の原因を見つけました。アプリケーションを実行してアプリケーションを正しく閉じると(すべてのプロセスを完了した後)、正常に動作します。エラーメッセージは表示されません...