2014-06-13 43 views
0

我有一個C#程序,INSERT,SELECT工作正常。我想嘗試更新我的DataGridView到數據庫。C#sqllite datatable到數據庫更新不會工作

如果我在GridView中刪除一行,然後將它作爲DataTable發送到數據庫,除了一件事情之外,所有這些都可以正常工作,它會將新條目寫入我的三行,刪除後變爲5後應該是2。

這裏是我的代碼:

public void Update(DataTable dataforupdate, string table) 
{ 
    if (table == "Musik") 
    { 
     SQLiteDataAdapter adapter = new SQLiteDataAdapter("SELECT * FROM Musik",m_dbConnection); 
     SQLiteCommandBuilder builder = new SQLiteCommandBuilder(adapter); 
     adapter.Update(dataforupdate); 
    } 
} 

應該刪除表,然後插入的所有數據的數據表(它是具有多個刪除或插入時,最容易的事情)。

編輯:它現在複製表並插入它,所以表中有兩次。 在添加DataTable之前,似乎沒有必要使用「DELETE FROM MUSIK」,但它確實有效,如果可以幫助我想知道更好的解決方案。

+2

你爲什麼要刪除整個表格。您應該刪除行並更新行。除非你的改變幾乎影響你所有的餐桌,否則你的方法是正確的。 – AnthonyLambert

+0

我認爲這會更容易,因爲我真的不知道如何正確使用它。 –

+0

至於現在它需要新的條目和插入到數據庫,連同已經在那裏的所有條目。所以每次我添加一個新條目時,它都會將所有條目+ 1插入到數據庫中,這意味着數據庫在每次運行時都會加倍。 –

回答

1

它應該刪除表,然後插入數據表與所有數據(因爲這是多個刪除或插入時最容易做的事情)。

我不同意。事實上,你正在做的事實際上很危險,因爲你沒有使用交易。如果在清空數據庫之後會發生插入記錄的異常,會發生什麼情況?你輸了一切

在SQLite(或任何數據庫)中執行多重插入/刪除操作相當簡單,例如

INSERT INTO SomeTable VALUES (A, B, C...) 
INSERT INTO SomeTable VALUES (D, E, F...) 
... 

對於刪除,這一切都取決於刪除的條件。例如,如果我想刪除所有記錄,其中A > 10

DELETE FROM SomeTable WHERE A > 10 

我建議你看看使用像sqlite-net它做了很多沉重的SQL提升你的ORM。

+0

謝謝你的答案..我必須承認,我得到了錯誤的刪除,然後插入表。但最重要的是可以使用datasets/datatables來完成,還是應該使用純粹的查詢字符串? –

+0

我絕不會推薦使用純粹的查詢字符串,除非你真的必須這樣做,因爲有安全隱患需要確保你滿足。使用ORM工具通常更安全(也更容易),但是,像現在一樣使用'DataTable'沒有什麼壞處。我試圖做的一點是,你不應該爲了添加/刪除幾行而真正清空整個表格。 – James

+0

嗨再次..並感謝您的答案,我會看看這個ORM工具,看看我能否弄清楚。如果我即將使用DataTable,那麼我應該如何使用它,而不必每次都清空表格,因爲它會被重複atm。 –