2013-05-15 53 views
0

我有這樣的代碼在App.xaml.cs:的SQLite找不到表

private SQLiteConnection dbCon; 

    public void App_Startup(object sender, StartupEventArgs e) 
    { 
     SQLiteConnection.CreateFile("testdb.sqlite"); 

     dbCon = new SQLiteConnection("Data Source=testdb.sqlite;Version=3;"); 
     dbCon.Open(); 

     string query = "create table if not exists Settings(Key nvarchar(max), Value nvarchar(max));"; 
     SQLiteCommand command = new SQLiteCommand(query, dbCon); 
     command.ExecuteNonQuery(); 
    } 

這將運行得很好......但後來在ShellViewModel.cs我有這樣的:

public ShellViewModel() 
    { 
     dbCon = new SQLiteConnection("Data Source=testdb.sqlite;Version=3;"); 
     dbCon.Open(); 

     string query = "Select Value from Settings where (Key = 'isFirstTime')"; 
     SQLiteCommand command = new SQLiteCommand(query, dbCon); 
     command.ExecuteNonQuery(); 

     //if(no information or first time) 
     //  show registerationview.xaml 
     //else 
     this.ActivateItem(new MainViewModel()); // show main view. 
    } 

事情是我在上面的代碼中得到「表未找到」。

爲了這個,我能想到的唯一原因是,App.xaml.cs是在項目的根目錄下,而ShellViewModel.csViewModels文件夾裏面,但我不知道如何使它指向特定的數據庫文件在根目錄下,如果這就是問題。

問題/解決方案是什麼? 我試着找到答案,但所有的問題都回答'可能的原因到問題',所以他們並沒有真正的幫助。

回答

1

使用完整路徑,在使用SQLite數據庫工作如下

string fullPath = Path.Combine(ApplicationDataBaseFolderPath, "testdb.sqlite"); 

SQLiteConnection.CreateFile(fullPath); 

而且

dbCon = new SQLiteConnection(String.Format("Data Source={0};Version=3;", fullPath)); 

的所有位置,您可以使用一個答案爲Getting the application's directory from a WPF application SO問題,並找到aplication目錄然後將它與數據庫應該定位的文件夾名稱結合起來。

string ApplicationDataBaseFolderPath = Path.Combine(System.AppDomain.CurrentDomain.BaseDirectory, "AppData"); 
+0

謝謝。什麼是'ApplicationDataBaseFolderPath'雖然?這是不承認的。 – Asaf