2010-09-05 161 views
16

當用戶啓動我的應用程序時,他或她可以創建一個新項目,這意味着要創建一個包含所有表的新數據庫。我如何創建一個新的SQLite數據庫,包含所有的表格?

我不想從舊數據庫/項目複製表的結構,因爲在此期間,由於程序的更新,表可能已更改。這會導致崩潰。

因此,對於我部署的每個應用程序更新,我還應該部署一個創建數據庫和表的腳本文件,對嗎?

腳本文件應該是什麼樣子,以及如何在C#中調用它?

+0

我沒有SQLLite(這就是爲什麼這不是一個答案),但你應該能夠導出數據庫模式和任何初始數據到SQL腳本文件。然後,您可以在安裝時執行這些腳本來設置數據庫。在更新架構時保持腳本更新。 – ChrisF 2010-09-05 21:35:09

+0

感謝Timwi的鏈接。 – Elisabeth 2010-09-07 18:16:32

回答

3

你可以編寫一個腳本來完成這一切,但你也可以有一個測試你的數據庫接口的單元測試項目。如果你這樣做,那麼你會希望能夠創建一個測試數據庫與虛擬數據僅用於測試。基本上,我的觀點是,如果你使用腳本文件來創建應用程序數據,並且如果你想添加單元測試,那麼你需要爲他們創建另一個腳本文件,或者你需要在代碼中創建數據庫。

我會主張在您的代碼中創建一個類,以便爲應用程序和單元測試動態創建數據庫模式。那麼如果你改變了模式,你只需要在一個地方擔心它,而不必處理不同步的事情(希望)。

由於您使用的是SQLite和C#,因此我建議您嘗試使用SQLite.NET。它讓我的生活變得更加輕鬆,迄今爲止我對此感到非常滿意。

使用SQLite.NET,您可以創建一個SQLiteCommand,將其CommandText設置爲「CREATE TABLE(your schema here)」,然後調用ExecuteNonQuery來生成表。

+0

你怎麼看待包括一個sqlite創建腳本到我的應用程序或應用程序更新的安裝程序安裝程序。這個腳本在用戶創建一個新項目時執行。因此,只要我發佈一個新版本創建一個文本文件並將我的表的所有創建表...複製到此文件中,我就必須做到這一點。 – Elisabeth 2010-09-06 17:37:29

+0

我使用的sqlite IDE可以輕鬆地將所有表及其結構轉儲爲一個.sql文件所有的分號分隔,就像我需要它運行多個語句一個ExecuteNonQuery :) – Elisabeth 2010-09-06 17:54:03

0

對於一些協助,你可以看看我的一個朋友製作的公有領域項目: www.codeplex.com/publicdomain

隨着噸其他有用的實用程序,看看Data.SQLHelper.GenerateCreateTablesQuery(DataTable[] tables)。只需使用SQL作爲數據庫類型。

23

也許這將幫助:

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 
); 
+2

類型名稱_e後面的括號中的數字參數。 G。 「NVARCHAR(2048)」_被SQLite忽略; SQLite不強加任何長度限制。 – 2013-02-09 12:49:42

+0

你不應該硬編碼你的路徑。db'文件;它應該可以在安裝時進行配置(儘管這並不意味着最終用戶應該指定安裝db的位置),特別是因爲C#和sqlite是跨平臺的。 – 2015-10-28 17:07:32

相關問題