2009-10-09 16 views
5

對於我在VS2008中構建的WinForms應用程序來說,重新嘗試使用sqlite會很好。在C#winforms應用程序中使用SQLite - 幾個基本問​​題?

  1. 安裝 - 難道僅僅是去掉「System.Data.SQLite.DLL」文件到某個文件夾在我的VS2008的項目(例如創建一個文件夾),然後創建一個「參考」呢?我已經制作了參考CopyGlobal = TRUE的屬性。是的想法,當我部署我的應用程序這應該工作(例如部署應用程序的DLL)

  2. 初始數據庫 - 我一定要創建一個初始數據庫或不?我在幫助文件中看到下面提到的代碼,但它實際連接到的數據庫是什麼以及數據庫文件在哪裏?

    DbProviderFactory fact = DbProviderFactories.GetFactory("System.Data.SQLite"); 
    using (DbConnection cnn = fact.CreateConnection()) 
    { 
        cnn.ConnectionString = "Data Source=test.db3"; 
        cnn.Open(); 
    } 
    
  3. 使用什麼方法 - 這通常是我將如何使用/撥打電話?

    DbProviderFactory fact = DbProviderFactories.GetFactory("System.Data.SQLite"); 
    using (DbConnection myconnection = fact.CreateConnection()) 
    { 
        myconnection.ConnectionString = "Data Source=test.db3"; 
        myconnection.Open(); 
        SQLiteTransaction mytransaction = SQLiteTransaction)myconnection.BeginTransaction(); 
        SQLiteCommand mycommand = new SQLiteCommand((SQLiteConnection)myconnection); 
        mycommand.CommandText = "SELECT * FROM SYSTEM"; 
        mycommand.ExecuteNonQuery(); 
        mytransaction.Commit(); 
        myconnection.Close(); 
    } 
    
  4. 我該如何設置數據庫表?我會這樣做並將其作爲模板存儲在我的VS2008項目中?或者,如果它不在那裏,我想要自動創建數據庫中的代碼?

  5. 如果4中的想法是先設置表,那麼我會在哪裏存儲這個初始數據庫文件?這樣當我運行項目來測試它,然後使用數據庫文件時,我測試的那個會在之後被廢棄。我想我問如何確保我有一個單獨的空白,但配置(與表)數據庫作爲「源」在我的VS2008項目,但後來當我運行/調試它,它會需要一個副本,用於測試?

感謝

+0

請注意爲什麼 - 但無法獲得Q3代碼才能很好地顯示 – Greg

回答

4
  1. 是。 SQLite是一個xcopy-deployment數據庫;沒有註冊,您的應用程序只需要該DLL即可使用它。

  2. 數據庫在連接字符串中指定。在這種特殊情況下,它位於應用程序工作文件夾中的test.db3文件中。

  3. 您可能要緩存到數據庫的連接,以避免每次需要訪問它時打開它的昂貴的操作。另外,我不確定你爲什麼需要一個事務,因爲你所做的只是從數據庫中讀取。

  4. 你有兩個選擇 - 要麼存儲與預先創建架構空數據庫,並在你的構建過程將其複製到輸出目錄;或者在第一次連接數據庫時創建一組SQL腳本,以便在您的代碼中針對數據庫執行。你選擇哪一個取決於你是否希望你的應用程序負責創建模式或構建過程。

  5. 如果您使用預先創建的模式創建了一個空數據庫,您可以將它作爲文件添加到源代碼中,並指示VS將其複製到輸出目錄(如我已經提到的)。

+0

thansk Franci - 你能否給我一個快速指向VS2008中的位置,我會安排「指示VS將它複製到輸出目錄「? – Greg

+1

在VS2005中,您可以通過在「解決方案資源管理器」中選擇文件並在「屬性」中將屬性「複製到輸出目錄」更改爲「始終複製」或「如果新建複製」來執行此操作。在VS2008中它應該是一樣的。 – Agg

+0

是的,正如@Agg所說的,你可以通過解決方案資源管理器中的文件屬性來執行此操作。 –

2

我幾乎總是使用使用這樣:

using (DbConnection conn = new SQLiteConnection(...)) { 
    using (DbTransaction tran = conn.BeginTransaction()) { 
     using (DbCommand comm = conn.CreateCommand()) { 
      ... 
     } 
     tran.Commit(); 
    } 
    conn.Close(); 
} 

爲了使SQLite的執行,你必須使用插入,更新交易和刪除,你必須使用paramaterized查詢。連接查詢要慢得多:How do I get around the "'" problem in sqlite and c#?

相關問題