2011-04-09 64 views
0

我正在處理一個小應用程序,而部分項目目標只是爲了更熟悉SQLite。主要入口點是一個控制檯應用程序(名爲Console的子項目),但數據訪問代碼位於不同的子項目(名爲Infrastructure)中。我剛剛在基礎架構中創建了一個名爲Data的文件夾,並在那裏刪除了.sqlite文件並添加了一些虛擬表和數據。Visual Studio項目中的SQLite文件位置

該項目是這樣的:

  • 解決方案
    • 控制檯(項目)
    • 域(項目)
    • 基礎設施(項目)
      • 數據(文件夾)

我原來的連接字符串只是看着像這樣:

var cnx = new SQLiteConnection("Data Source=testing.sqlite; FailIfMissing=True"); 

我第一次看到發生的事情是,一個0KB testing.sqlite是在Debug目錄被丟棄。簡單的計數查詢會失敗,因爲我引用的表顯然不存在於空文件中。在玩過一段時間之後,我發現如果將.sqlite文件的屬性設置爲Content和Always Always,並且如果我更改了連接字符串,則可以按預期進行連接。

var cnx = new SQLiteConnection("Data Source=Data\\testing.sqlite; FailIfMissing=True"); 

我在這裏錯過了什麼,或者這確實是我應該如何將文件包括在我的項目中?

+0

我在關於在這裏或在Code Review上詢問這個問題,但我認爲我會先在這裏嘗試。 – Mattio 2011-04-09 02:52:31

回答

1

我在想這裏最好的方法是將文件移動到項目之外,並使用App.config中的設置。

在App.config中:

<connectionStrings> 
    <add name="mydb" connectionString="Data Source=D:\\Data\\testing.sqlite; FailIfMissing=True"/> 
</connectionStrings> 

在代碼:

private string _connectionString = ConfigurationManager.ConnectionStrings["mydb"].ConnectionString; 

如果我想在我的項目的物理文件,我可以繼續做我上面提到的。

0

如果SQLite數據庫不需要在分發之前用太多的數據填充,您可以在運行時創建它。如果你希望它是在同一位置的可執行文件,試試這個來創建它(VB.Net代碼)

Dim SQLconnect As New SQLite.SQLiteConnection() 
SQLconnect.ConnectionString = "Data Source=" & Application.StartupPath & "\database.db;" 
SQLconnect.Open() 
SQLconnect.Close() 

這將創建一個空數據庫文件,如果你想創建表和/或加載一些數據,你可以做這樣的事情(檢查,看是否表已經存在,當然後):

If tblSettingsExist = False Then 
     SQLconnect.Open() 
     SQLcommand = SQLconnect.CreateCommand 
     SQLcommand.CommandText = "CREATE TABLE Settings(setting TEXT PRIMARY KEY, value TEXT);" 
     SQLcommand.ExecuteNonQuery() 
     SQLcommand.Dispose() 
     SQLconnect.Close() 

     'add records for all default settings 
     SQLite_InsertRecord("Settings", "setting, value", "'someSetting1', '-1'") 
     SQLite_InsertRecord("Settings", "setting, value", "'someSetting2', '0'") 
     SQLite_InsertRecord("Settings", "setting, value", "'someSetting3', '1'") 
    End If 

只是爲了完整性,這裏是我使用插入數據子程序:

Public Sub SQLite_InsertRecord(ByVal table As String, ByVal fields As String, ByVal values As String) 
    Dim SQLcommand As SQLiteCommand 
    SQLconnect.Open() 
    SQLcommand = SQLconnect.CreateCommand 
    SQLcommand.CommandText = "INSERT INTO " & table & " (" & fields & ") VALUES (" & values & ")" 
    Try 
     SQLcommand.ExecuteNonQuery() 
    Catch ex As Exception 
     MsgBox(ex.Message, MsgBoxStyle.Critical, "Database Insertion Error") 
    Finally 
     SQLcommand.Dispose() 
     SQLconnect.Close() 
    End Try 
End Sub 
相關問題