2017-05-18 22 views
0

我有以下代碼,它讀取dataGridView中的所有數據,並假定將其保存到數據庫中。數據庫在程序退出時不保存

private void datInp_Click(object sender, EventArgs e) 
{ 
    SQLiteConnection con = new SQLiteConnection("Data Source=dBase1.sqlite;Version=3;"); 
    con.Open(); 
    SQLiteCommand sqlDatBas = new SQLiteCommand("INSERT INTO table1(column1,column2) VALUES (@c1,@c2)", con); 
    for (int i = 0; i < dataGridView2.RowCount-1; i++) 
    { 
     sqlDatBas.Parameters.AddWithValue("@c1", dataGridView2.Rows[i].Cells[0].Value); 
     sqlDatBas.Parameters.AddWithValue("@c2", dataGridView2.Rows[i].Cells[1].Value); 
     sqlDatBas.ExecuteNonQuery(); 
    } 
    con.Close(); 
    con.Dispose(); 
} 

但是,每當我運行它,並使用該程序,以顯示數據庫的當前狀態,它顯示爲如果數據得到了保存,但是,如果我退出我的程序,然後再次運行它,它只是顯示基礎數據庫,而不添加新添加的數據。是因爲我錯過了一列嗎?由於表格是用ID創建的,但它應該自動增加。以下是表格的創建方式。

CREATE TABLE "table1" ("columnID" INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL UNIQUE , "column1" VARCHAR, "column2" VARCHAR)

我總是用ExecuteNonQuery()的循環,使所有的數據被添加到數據庫中的每一個傳球后。我在dataGridView中顯示數據庫的當前狀態,並顯示添加的項目,但不是當我重新啓動程序時。我錯過了什麼?

+1

檢查當您構建/啓動應用程序時,您的'SQLite'數據庫文件是否被複制到'bin \ Debug'文件夾。在解決方案資源管理器中,查看數據庫文件的屬性並檢查「複製到輸出目錄」選項的值 – Nino

+0

當前數據庫文件已超過一週;該屬性爲「始終複製」,構建操作爲「內容」。 但是,'bin'和'obj'文件夾在解決方案資源管理器中顯得有點灰。我不知道如何描述它,但文件夾本身看起來像馬里奧的半隱形塊(透明,周圍有白點)。 – EInherjar

+1

好吧,那是你的問題。當你啓動你的應用時,一個空的數據庫將被複制到你保存數據的那個數據庫上。將'Copy to Output directory'選項更改爲'Copy if newer'。這意味着數據庫只有在bin \ Debug文件夾(bin \ Debug是編譯後的exe和dll-s所在的位置)時纔會被複制。 – Nino

回答

1

如果將數據庫文件包含在項目中,請確保每次構建解決方案時都不會將其複製到輸出目錄。如果這樣做,存儲在項目源文件中的數據庫版本(在執行過程中未由二進制文件修改)將覆蓋Output目錄中的數據庫版本。

要更改此設置,請在Solution Explorer中選擇您的數據庫文件,並在Properties -> Copy to output directory之下告訴VS Do not copy/Copy if newer

如果手動更改數據庫並希望VS爲您覆蓋輸出文件夾中的任何舊數據庫,第二個選項將非常有用。但是,我最終告訴VS永遠不要複製它,我寧願控制自己的複製。

+0

好吧,這複製了尼諾說的:) –

相關問題