2011-05-10 79 views
1

我試圖通過DataTable(其綁定到一個DataGrid)在我的數據源(一個SQL CE數據庫)來替換表(FooTable)取代數據庫表。我想這樣做的原因是:在我從數據庫填充到DataSet(顯示DataGrid上的所有行)之後,我可能會編輯,刪除並向DataTable添加多行。我每次修改DataTable時都不會更新對DataSource的更改(SQL CE),而是希望在會話結束時共同完成此操作。如何通過一個DataTable

我的做法是直接的:

  1. `DELETE`從我的數據源表中的所有數據(FooTable)(我用** SQL CE **,所以`TRUNCATE`不可用)
  2. 到空數據源表

以下插入了`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"); 
} 

回答

2

DataTable軌道RowState小號內部。
修改現有行時,其RowState將變爲Modified,因此DataAdapter會嘗試運行UPDATE命令。

您需要在修改的行上調用SetAdded()方法將它們的RowState設置爲Added而不是Modified

+0

我編輯了我的問題。我嘗試將RowState修改爲RowState.Added,但RowState是隻讀的,不允許我手動更改(請參閱編輯的代碼)。 – KMC 2011-05-10 04:24:40

+0

@KMC:調用'SetAdded()'方法。 – SLaks 2011-05-10 11:11:15

+0

謝謝你的關注,但是我照你的說法做了,它給了我這個錯誤「SetAdded和SetModified只能在DataRow上調用不變的DataRowState。」......我編輯了我的問題。 – KMC 2011-05-11 01:48:27