2014-02-12 268 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())这是奇怪的,因为基础表是空的,所以没有结果。有没有人有任何想法可能是这里的问题?我确实有用exe部署的LinqConnect DLL文件以及sqlite3.dll,所以这不应该成为问题。

回答

0

看来我错过了部署机器上正确的输出文件夹中的sqlite3.dll。我可以发誓它在那里,但是当我将整个项目复制到另一台机器来测试它时,我仍然收到错误,并且当我查看bin目录时,该DLL已丢失。哎呀!