我是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斷開層應用程序),所以如果有人可以幫助它,將不勝感激。
通常,您根本不會調用AcceptChanges。當你讓適配器更新你的表時,它會處理它。 – 2010-09-22 17:47:20
是的,這是問題所在。我想我一定誤解了文檔。 – Corvillus 2010-09-22 19:16:55