Я новичок в C # и .NET в целом, пришла из опыта FLOSS (в основном PHP, Python и Ruby). Я использовал мастер настройки источника данных для подключения к файлу MDB (к сожалению, это необходимо сделать, поскольку приложение, с которым он используется, было написано более 5 лет назад и в настоящее время является приложением VB6, подключающимся к базе данных Access). Мастер создал класс DataSet JobDataSet со следующими таблицами данных (среди прочих): ItemType, Item. ItemRevision
В 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 вместо установки фактического идентификатора базы данных, и данные никогда фактически не добавляются в таблицы. Я уверен, что здесь упущено что-то простое (как я уже говорил, новинка для этого, первое приложение с отключенным слоем ADO.NET), поэтому, если кто-нибудь сможет помочь, оно будет оценено.