開発マシン以外のマシンでプロジェクトをテストしようとすると、奇妙な動作が発生します。開発マシンではすべて正常に動作しますが、プログラムをデプロイすると、「DbConnection を開くときにエラーが発生しました」というメッセージが表示されます。InnerException「データベースファイルを開けません」で。
基本的に、exeファイルと同じフォルダーに空のデータベース(スキーマのみ)があり、前述のように、開発マシンではすべて正常に動作します。LinqConnect を使用して SQLite データベースにクエリを実行しています。エラーが発生しているメソッドを次に示します (データベースにアクセスしているメソッドでも同じエラーが発生します)。
private void LoadAccountsFromDatabase()
{
var accounts = new ObservableCollection<Account>();
var connectionString =
string.Format("Data Source='{0}';Version=3;Default Command Timeout=10000;", UserPreferences.DatabasePath);
AccountsGrid.CommitEdit();
AccountsGrid.SelectedItem = null;
MessageBox.Show(connectionString);
try
{
using (var db = new MainDataContext(connectionString))
{
MessageBox.Show("step 4.5");
var query = from a in db.Accounts
where a.Inactive == 0 || a.Inactive == null || ShowInactiveCheckBox.IsChecked == true
orderby a.AccountName, a.AccountNickname
select a;
try
{
MessageBox.Show("step 4.6");
if (query.Any())
{
MessageBox.Show("step 4.61");
foreach (var item in query)
{
MessageBox.Show("step 4.65");
accounts.Add(item);
}
}
MessageBox.Show("step 4.7");
AccountsGrid.ItemsSource = accounts;
MessageBox.Show("step 4.8");
}
catch (Exception e)
{
MessageBox.Show("accounts add " + e.Message);
if (e.InnerException != null)
{
MessageBox.Show(e.InnerException.Message);
}
}
}
}
catch (Exception e)
{
MessageBox.Show("load accounts " + e.Message);
}
}
「ステップ 4.6」というメッセージが表示された後、例外が発生します。「ステップ 4.61」が表示されif (query.Any())
ないため、基になるテーブルが空であるため、エラーが奇妙な行にあるように見えます。結果はありません。ここで何が問題になるのか、誰にも考えがありますか? 私はLinqConnect DLLファイルをexeとsqlite3.dllでデプロイしているので、問題にはなりません。