當用戶啓動我的應用程序時,他或她可以創建一個新項目,這意味着要創建一個包含所有表的新數據庫。我如何創建一個新的SQLite數據庫,包含所有的表格?
我不想從舊數據庫/項目複製表的結構,因爲在此期間,由於程序的更新,表可能已更改。這會導致崩潰。
因此,對於我部署的每個應用程序更新,我還應該部署一個創建數據庫和表的腳本文件,對嗎?
腳本文件應該是什麼樣子,以及如何在C#中調用它?
當用戶啓動我的應用程序時,他或她可以創建一個新項目,這意味着要創建一個包含所有表的新數據庫。我如何創建一個新的SQLite數據庫,包含所有的表格?
我不想從舊數據庫/項目複製表的結構,因爲在此期間,由於程序的更新,表可能已更改。這會導致崩潰。
因此,對於我部署的每個應用程序更新,我還應該部署一個創建數據庫和表的腳本文件,對嗎?
腳本文件應該是什麼樣子,以及如何在C#中調用它?
你可以編寫一個腳本來完成這一切,但你也可以有一個測試你的數據庫接口的單元測試項目。如果你這樣做,那麼你會希望能夠創建一個測試數據庫與虛擬數據僅用於測試。基本上,我的觀點是,如果你使用腳本文件來創建應用程序數據,並且如果你想添加單元測試,那麼你需要爲他們創建另一個腳本文件,或者你需要在代碼中創建數據庫。
我會主張在您的代碼中創建一個類,以便爲應用程序和單元測試動態創建數據庫模式。那麼如果你改變了模式,你只需要在一個地方擔心它,而不必處理不同步的事情(希望)。
由於您使用的是SQLite和C#,因此我建議您嘗試使用SQLite.NET。它讓我的生活變得更加輕鬆,迄今爲止我對此感到非常滿意。
使用SQLite.NET,您可以創建一個SQLiteCommand,將其CommandText設置爲「CREATE TABLE(your schema here)」,然後調用ExecuteNonQuery來生成表。
對於一些協助,你可以看看我的一個朋友製作的公有領域項目: www.codeplex.com/publicdomain。
隨着噸其他有用的實用程序,看看Data.SQLHelper.GenerateCreateTablesQuery(DataTable[] tables)
。只需使用SQL作爲數據庫類型。
也許這將幫助:
SQLiteConnection.CreateFile("c:\\Ik.db");
即時創建一個新的數據庫並在其上執行查詢。查詢應該是這樣的:
CREATE TABLE IF NOT EXISTS [Setting](
[ID] INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT,
[Key] NVARCHAR(2048) NULL,
[Value] NVARCHAR(2048) NULL
);
類型名稱_e後面的括號中的數字參數。 G。 「NVARCHAR(2048)」_被SQLite忽略; SQLite不強加任何長度限制。 – 2013-02-09 12:49:42
你不應該硬編碼你的路徑。db'文件;它應該可以在安裝時進行配置(儘管這並不意味着最終用戶應該指定安裝db的位置),特別是因爲C#和sqlite是跨平臺的。 – 2015-10-28 17:07:32
我沒有SQLLite(這就是爲什麼這不是一個答案),但你應該能夠導出數據庫模式和任何初始數據到SQL腳本文件。然後,您可以在安裝時執行這些腳本來設置數據庫。在更新架構時保持腳本更新。 – ChrisF 2010-09-05 21:35:09
感謝Timwi的鏈接。 – Elisabeth 2010-09-07 18:16:32