我認爲最好我首先解釋我的場景。比較DataRows,動態添加表格值
我在事務中使用SqlDataAdapters將所有數據從sql數據庫中取回。
在一個例子中,我有一所大學。我想打開這所大學並添加模塊,同時我希望將學生添加到這些新模塊中。
這些模塊和學生被保存到它們各自的DataTable中,並且學生表有一個與其父模塊「moduleid」有關的列。
我的問題是,我需要一種方法來保存這兩個在同一個事務中,添加新的moduleid到它的子行。我可以創建新模塊,並且其數據表中的模塊ID已更新,但是當我現在需要將學生保存到此模塊時,我需要將其添加到模塊中,否則將其添加到數據庫中而沒有一個。
這是我迄今爲止的努力,但我覺得我在吠叫錯誤的樹。
DataTable dt_new_modules = ds_College.Tables["module"].GetChanges(DataRowState.Added);
da_modules.Update(ds_College.Tables["module"]);
ds_College.Tables["module"].AcceptChanges();
DataTable dt_added = ds_College.Tables["student"].GetChanges(DataRowState.Added);
if (dt_added != null)
{
if (dt_new_modules != null)
{
foreach (DataRow new_module in dt_new_modules.Rows)
{
foreach (DataRow updated_module in ds_College.Tables["module"].Rows)
{
if (updated_module.Equals(new_module))
{
foreach (DataRow new_student in dt_added.Rows)
{
if ((int)new_student["moduleid"] == (int)new_module["moduleid"])
new_student["moduleid"] = (int)updated_module["moduleid"];
}
}
}
}
}
da_student.Update(dt_added);
dt_added.AcceptChanges();
}
DataTable dt_modified = ds_College.Tables["student"].GetChanges(DataRowState.Modified);
if (dt_modified != null)
{
da_student.Update(dt_modified);
dt_modified.AcceptChanges();
}
我通過所有添加的用戶,如果數據行試圖循環是一樣的之一,它被賦予它新的moduleId,然後獲取新的ID,並把它交給用戶之前,但是我覺得必須有一個更有效的方法來做到這一點。
對於命令生成器對象,似乎沒有「更新」方法。這是正確的課程嗎? http://msdn.microsoft.com/en-us/library/system.data.sqlclient.sqlcommandbuilder%28v=vs.110%29.aspx – user2992802
對不起,我的錯誤。我的意思是在數據適配器上調用「更新」。 – Veverke
簡而言之,sql命令生成器對象將創建插入,更新和刪除所需的sql語句,以反映數據庫中的任何內存中的更改。爲了實現更改,請在數據適配器上調用「update」方法,但是考慮到需要先更新的表,即父表[父表DataAdapter here] .Update() - 之後[您的兒童表格DataAdapter在這裏] .Update()。 – Veverke