0

開発マシン以外のマシンでプロジェクトをテストしようとすると、奇妙な動作が発生します。開発マシンではすべて正常に動作しますが、プログラムをデプロイすると、「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でデプロイしているので、問題にはなりません。

4

1 に答える 1

0

展開マシンの正しい出力フォルダーに sqlite3.dll が見つからなかったようです。そこにあると断言することもできましたが、プロジェクト全体を別のマシンにコピーしてテストしたところ、まだエラーが発生し、binディレクトリを調べたところ、その DLL が見つかりませんでした。おっとっと!

于 2014-02-13T00:05:47.090 に答える