2010-09-22 61 views
1

我是C#和.NET的新手,來自FLOSS背景(主要是PHP,Python和Ruby)。我已經使用數據源配置嚮導連接到一個MDB文件(不幸的是需要這樣做,因爲這個應用程序使用的是5年前寫的,而且目前是連接到Access數據庫的VB6應用程序)。該向導創建了一個DataSet類JobDataSet,其中包含以下DataTable(其他):ItemType,Item。 ItemRevision如何獲取此DataSet以添加我的新行並正確更新?

在MDB,這些地圖下面的表格:

 
ItemRevisions (
    ID: AutoNumber PK, 
    JobNo: Text, 
    ItemTypeID: Number, 
    ItemNo: Number, 
    RevisedAt: Date/Time, 
    RevisedBy: Text, 
    ItemID: Number 
) 
Items (
    ID: AutoNumber PK, 
    JobNo: Text, 
    ItemTypeID: Number, 
    ItemNo: Number 
) 
ItemTypes: (
    ID: AutoNumber PK, 
    Type: Text 
) 

不管怎樣,下面是該方法的代碼不起作用:

 
private void AddJobItem() 
{ 
    itemTypesBindingSource.EndEdit(); 
    JobDataSet.ItemsRow itemsRow = jobDataSet.Items.NewItemsRow(); 
    itemsRow.ItemTypeID = long.Parse(comboBoxItemType.SelectedValue.ToString()); 
    itemsRow.JobNo = JobNo; 
    itemsRow.ItemNo = (long)numericUpDownItemNo.Value; 
    jobDataSet.Items.Rows.Add(itemsRow); 
    jobDataSet.Items.AcceptChanges(); 
    itemsTableAdapter.Update(jobDataSet.Items); 
    JobDataSet.ItemRevisionsRow itemRevisionsRow = jobDataSet.ItemRevisions.NewItemRevisionsRow(); 
    itemRevisionsRow.ItemTypeID = long.Parse(comboBoxItemType.SelectedValue.ToString()); 
    itemRevisionsRow.JobNo = JobNo; 
    itemRevisionsRow.ItemNo = (int)numericUpDownItemNo.Value; 
    itemRevisionsRow.RevisedAt = System.DateTime.Now; 
    itemRevisionsRow.RevisedBy = Program.AuthForm.Username; 
    itemRevisionsRow.ItemID = itemsRow.ID; 
    jobDataSet.ItemRevisions.Rows.Add(itemRevisionsRow); 
    jobDataSet.ItemRevisions.AcceptChanges(); 
    itemRevisionsTableAdapter.Update(jobDataSet.ItemRevisions); 
    jobDataSet.AcceptChanges(); 
} 

基本上,這個問題就對象屬性而言,所有的東西都可以正確設置(通過單步調試通過調試器並查看所討論對象的值),不會引發任何異常。但主鍵保持-1而不是設置爲實際的數據庫ID,並且數據永遠不會實際添加到表中。我確信我在這裏錯過了一些簡單的東西(就像我剛纔說的,這是第一個ADO.NET斷開層應用程序),所以如果有人可以幫助它,將不勝感激。

回答

2

在使用適配器之前,通過調用AcceptChanges,基本上說,數據集中的所有數據都是未修改的且是當前的。適配器將因此不做任何事情。在通過數據庫運行之前不要調用AcceptChanges,只有在數據庫操作成功時才​​有意義,「AcceptChanges」有意義

+0

通常,您根本不會調用AcceptChanges。當你讓適配器更新你的表時,它會處理它。 – 2010-09-22 17:47:20

+0

是的,這是問題所在。我想我一定誤解了文檔。 – Corvillus 2010-09-22 19:16:55