2017-05-04 197 views
0

我目前正在使用SQLite處理IoT核心UWP應用程序。我遇到了一個問題,在遠程的Rapberry上進行調試或者將應用程序部署到它之後,在完成程序之後,所有的表都消失了。SQLite表關閉後消失

我有一些sourve代碼:

private static SQLiteConnection DbConnection 
    { 
     get 
     {    
      return new SQLiteConnection(
       new SQLitePlatformWinRT(), 
       Path.Combine(ApplicationData.Current.LocalFolder.Path, "IoTdb.sqlite")); 
     } 
    } 

    private void createDatabase() 
    { 
     try 
     { 
      db = DbConnection; 
      db.TraceListener = new DebugTraceListener(); 
      db.CreateTable<kapu_modClass>(); 
      db.Close(); 
      //string query = "CREATE TABLE IF NOT EXISTS " + getTName(11) + " (kapuMAzon int NOT NULL, kapuMNev varchar(255), PRIMARY KEY(kapuMAzon));"; 
      //db.Execute(query); 
     } 
     catch (Exception e) 
     { 
      Debug.WriteLine(e.ToString()); 
     } 
    } 

雖然我跑我的代碼,我可以創建表格,讓我的數據到它:

   kapu_modClass km = new kapu_modClass(); 
       km.kapuMAzon = 1; 
       km.kapuMNev = "1"; 
       db.Execute("INSERT INTO " + getTName(11) + " (kapuMAzon) VALUES('" + km.kapuMAzon + "');") ; 

[Table ("kapu_mod_tabla")] 
public class kapu_modClass 
{ 
    [PrimaryKey, Column("kapuMAzon", Name = "kapuMAzon")] 
    public int kapuMAzon { get; set; } 

    [MaxLength(255), Column("kapuMNev", Name = "kapuMNev")] 
    public string kapuMNev { get; set; } 
} 

一切工作正常,直到我關閉應用程序,然後當我重新啓動它時,我失去了一切,只剩下數據庫了。

有什麼建議嗎?

更新: 看起來,它有一個2開始cicle時期:在第一次嘗試時,它使我的數據庫,但無法打開它。在第二次啓動時,數據庫文件就在那裏,不需要創建,打開,創建表格,並且在關閉程序之後,刪除第一次嘗試創建的數據庫並返回到第一個Cicle。在每一個開始,我所有的表都是空的,嘗試了db.Execute(「PRAGMA TEMP_STORE = 1」);命令,它假設將我的表設置爲永久性的,但不是工作更加激烈。

+0

您是否意外地只使用內存數據庫?即存儲介質上沒有關聯的數據庫文件?與PC上的SQLite命令行工具(我的環境)我想我可以看到沒有文件名參數啓動sqlite3.exe時相同的行爲。 CLI然後開始一個警告'連接到瞬態內存數據庫。' – Yunnosch

+0

如何暫停應用程序?有沒有你寫關於刪除表的代碼的地方? –

+0

@Yunnosch關閉應用程序後,sqlite文件保持不變,我認爲應該是db文件。我從http://blogs.u2u.be/diederik/post/2015/09/08/Using-SQLite-on-the-Universal-Windows-Platform.aspx頁面獲取了示例,但他們沒有提到其他任何內容去做。我如何將它設置爲非內存數據庫? –

回答

0

好吧我擁有它,當我運行在調試模式下,或者創建一個調試應用程序包時,它會丟失一切,生成一個發佈應用程序包後它可以正常工作。