2014-02-12 6 views
0

Я испытываю странное поведение при попытке протестировать проект на машине, отличной от моей машины разработки. Все работает отлично на машине разработки, но при развертывании программы я получаю «Ошибка при открытии DbConnection». с InnerException «Невозможно открыть файл базы данных».Проблемы с подключением SQLite

В принципе, у меня есть пустая база данных (только схема) в той же папке, что и файл 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()), что является странным, поскольку базовые таблицы пустые, поэтому результатов нет. У кого-нибудь есть идеи, что может быть проблемой здесь? У меня есть файлы DLL LinqConnect, которые развертываются с exe, а также sqlite3.dll, так что это не должно быть проблемой.

ответ

0

Похоже, что я отсутствовал sqlite3.dll в правильной папке вывода на машине развертывания. Я мог бы поклясться, что он был там, но когда я скопировал весь проект на другую машину, чтобы проверить его, я все еще получал ошибку, и когда я заглянул в каталог bin, эта DLL отсутствовала. К сожалению!