我試圖通過DataTable
(其綁定到一個DataGrid
)在我的數據源(一個SQL CE數據庫)來替換表(FooTable)取代數據庫表。我想這樣做的原因是:在我從數據庫填充到DataSet
(顯示DataGrid
上的所有行)之後,我可能會編輯,刪除並向DataTable
添加多行。我每次修改DataTable時都不會更新對DataSource的更改(SQL CE
),而是希望在會話結束時共同完成此操作。如何通過一個DataTable
我的做法是直接的:
- `DELETE`從我的數據源表中的所有數據(FooTable)(我用** SQL CE **,所以`TRUNCATE`不可用)
- 到空數據源表
以下插入了`DataTable's`數據是我的C#代碼
/* Truncate the DataSource Table */
SqlCeCommand delCmd = new SqlCeCommand("DELETE FROM FooTable", conn)
conn.Open();
delCmd.ExecuteNonQuery();
conn.Close();
/* Insert DataTable into an empty DataSource Table */
string ins = @"INSERT INTO FooTable (FooName) values (@fooName)";
SqlCeCommand cmd = new SqlCeCommand(ins, conn);
da.InsertCommand = cmd;
da.Update(ds, "FooTable");
的代碼工作,如果我添加或在DataTable
刪除行,但是當我在DataTable
編輯特定的行插入表到我的數據源,我得到以下錯誤
「更新通過時需要一個有效的UpdateCommand具有修改行的DataRow集合。「
我不明白爲什麼我會得到這個錯誤。我已經清空了我的DataSource表中的所有行,我的DataSource不應該知道有修改的行,但將所有的DataTable行插入爲新行。
或者,有沒有簡單的方法來通過DataTable「REPLACE」DataSource表?
[EDITED]
我嘗試設置的RowState手動像下面代碼
foreach (DataRow row in dt.Rows)
{
row.RowState = DataRowState.Added;
}
但RowState的僅只讀,並且不能被寫入。
[編輯 - 第2] 我嘗試使用SetAdded設置它()
foreach (DataRow row in dt.Rows)
{
row.SetAdded();
}
然後我收到以下錯誤: 「SetAdded和SetModified之只能在具有不變的DataRowState數據行被調用。「
還沒設法得到它的工作...
[編輯 - 3] 所以最後得到它用下面的代碼工作:
using (SqlCeCommand insCmd = new SqlCeCommand(@"INSERT INTO FooTable (FooName) VALUES (@fooName)", conn))
{
insCmd.Parameters.Add("@fooName", SqlDbType.NVarChar, 10, "FooName");
dt.AcceptChanges();
foreach (DataRow row in dt.Rows)
{
row.SetAdded();
}
da.InsertCommand = insCmd;
da.Update(ds, "FooTable");
}
我編輯了我的問題。我嘗試將RowState修改爲RowState.Added,但RowState是隻讀的,不允許我手動更改(請參閱編輯的代碼)。 – KMC 2011-05-10 04:24:40
@KMC:調用'SetAdded()'方法。 – SLaks 2011-05-10 11:11:15
謝謝你的關注,但是我照你的說法做了,它給了我這個錯誤「SetAdded和SetModified只能在DataRow上調用不變的DataRowState。」......我編輯了我的問題。 – KMC 2011-05-11 01:48:27