從 .NET 中的字節流載入 SQLite 數據庫
我正在嘗試載入一個 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: