views:

33

answers:

1

Hi. I'm new to C# and .NET in general, coming from a FLOSS background (mostly PHP, Python and Ruby). I have used the Data Source configuration wizard to connect to an MDB file (unfortunately need to do this, as the app this is being used with was written over 5 years ago, and is currently a VB6 app connecting to an Access database). The wizard created a DataSet class JobDataSet with the following DataTables in it (among others):ItemType, Item. ItemRevision

In the MDB, these map to the following tables:

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
)

Anyway, the following is the code for the method that doesn't work:

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();
}

Basically, the issue is, everything gets set properly as far as the object properties are concerned (checked this by single stepping through the debugger and looking at the values of the objects in question), no exceptions are being thrown. But the primary keys stay -1 instead of setting to an actual database ID, and the data is never actually added to the tables. I'm sure I'm missing something simple here (like I said, new to this, first ADO.NET disconnected layer app), so if anybody could help it would be appreciated.

+2  A: 

BY calling AcceptChanges before using the adapter, you are basically saying that all data in the dataset is unmodified and current. The adapter will hence do nothing. Do not call AcceptChanges before running it through the DB, only when the DB operation succeeds it makes sense to "AcceptChanges"

flq
Normally you don't call AcceptChanges at all. When you let the Adapter Update your table it handles that.
Henk Holterman
Yep, that was the problem. I guess I must have misunderstood the documentation.
Corvillus