2015-09-11 148 views
0

我正在開發一個使用SQLite的Windows Phone 8應用程序,並試圖檢查數據庫是否存在,如果它不存在,它應該被創建。但我不斷收到錯誤消息「System.windows.shapes.path不包含聯合的定義」。還有其他方法可以做到嗎或者我該如何改進?如何檢查數據庫是否存在於SQLite中?

public static string DB_PATH = Path.Combine(Path.Combine(ApplicationData.Current.LocalFolder.Path, "ContactsManager.sqlite"));//DataBase Name 
    public App() 
    { 
     if (!CheckFileExists("ContactsManager.sqlite").Result) 
     { 
      using (var db = new SQLiteConnection(DB_PATH)) 
      { 
       db.CreateTable<Contacts>(); 
      } 
     } 
    } 

    private async Task<bool> CheckFileExists(string fileName) 
    { 
     try 
     { 
      var store = await Windows.Storage.ApplicationData.Current.LocalFolder.GetFileAsync(fileName); 
      return true; 
     } 
     catch 
     { 
     } 
     return false; 
    } 
+1

Path.Combine在System.IO.Path定義。 –

回答

0

@Panagiotis Kanavos的評論是正確的,你已經使用錯誤的命名空間解決了路徑類!

刪除

using System.Windows.Shapes; // for silverlite 
using Windows.UI.Xaml.Shapes; // for winrt 

並添加

using System.IO; 
+0

謝謝你......它工作完美..我刪除使用System.windows.shapes和替換它使用System.IO –

1

爲什麼你有一個Path.Combine一個Path.Combine?如果Path.Combine不能提供一個或兩個參數,爲什麼不簡單地連接兩個字符串?

你有它2X:public static string DB_PATH = Path.Combine(Path.Combine(ApplicationData.Current.LocalFolder.Path, "ContactsManager.sqlite"));

+1

Path.Combine *確實接受兩個參數。這可能是打字錯誤或複製粘貼代碼的部分 –

+0

這也可能是他的問題,因爲編譯器說:'System.windows.shapes.path不包含定義的組合或'我錯了嗎? – BendEg

+0

也許我是盲人,但具有一個字符串參數(https://msdn.microsoft.com/de-de/library/dd991142(v=vs.110).aspx)的方法是可用的,因爲Windows Phone ** 8.1 ** – BendEg

1

您可以通過此檢查:

public async Task<bool> isFilePresent(string fileName) 
{ 
return System.IO.File.Exists(string.Format(@"{0}\{1}", ApplicationData.Current.LocalFolder.Path, fileName); 
} 
2

你真的需要檢查數據庫中是否存在?我不知道windows phone,但在Windows中,只要您嘗試將表添加到SQLite數據庫中,如果數據庫不存在,它就會創建它。如果你擔心已經存在的表格,你可以使用:

CREATE TABLE IF NOT EXISTS tableName(...) 

(我試着問它作爲評論,但我沒有信譽)

相關問題