Dot-Net

從 .NET 中的字節流載入 SQLite 數據庫

  • June 21, 2011

我正在嘗試載入一個 SQLite 數據庫,該數據庫將作為資源嵌入到我的執行檔中。對於那些好奇的人,這是因為我使用了一個小型 SQLite 數據庫來儲存配置數據,並且我想發布嵌入在執行檔中的預設配置(我討厭必須將文件與程序一起攜帶)。

這只是預設配置。也就是說,我不需要修改這個配置。它是靜態的,在我的程序建構後無法更改。

我正在使用 SQLite 的 System.Data.SQLite 包裝器。

我可以像這樣訪問字節流:

using (var stream =
         Assembly.GetExecutingAssembly().GetManifestResourceStream(resourceName)) {
   // use of "stream" here.
}

但是,我不知道SQLiteConnection從這個流中創建一個對象。

簡單的方法是在每次程序載入時簡單地生成一個新的配置文件,然後告訴 SQLite 從該文件中讀取。這可能會起作用,但我想避免這種技術 - 我計劃重用我的解決方案來解決這個問題,還包括國際化支持(每種語言都是

$$ compressed $$SQLite 數據庫和預設語言嵌入在執行檔中 - 使用者可以添加其他語言,只需將其他語言數據庫複製到程序的工作目錄)。 我不關心在記憶體中保存這個數據庫的記憶體成本。它會非常小(可能小於 50 KiB),所以這不會打擾我。顯然,如果這是一個更大的數據庫,這可能是一個問題。

最後,我知道這可能被視為儲存配置的糟糕方式。雖然我同意基於純文字的解決方案適用於使用者手動輸入他/她的所有設置的情況,但這主要用於使用者未明確定義的設置。例如,儲存應用程序中各種停靠視窗的位置,或儲存有關內部資源可能位於何處的數據。

感謝您的幫助。

似乎此功能未在 System.Data.SQLite 提供程序中實現。您甚至不能將記憶體數據庫保存到文件中(即二進制格式),只能以 SQL 轉儲的形式保存。

因此,其中一種解決方案是將用於數據庫創建的 SQL 程式碼儲存在資源中。然後在每次應用程序啟動時在記憶體數據庫中創建。

我相信您想將其用於連接字元串:

Data source=:memory:

例如,請參見此處:Open a SQLiteConnection on a binary stream 而不是文件?

引用自:https://stackoverflow.com/questions/6418753