TableAdapter.Update不起作用

时间:2010-03-22 23:13:21

标签: c# sql sql-update tableadapter

这是我的功能:

    private void btnSave_Click(object sender, EventArgs e)
    {
        wO_FlangeMillBundlesTableAdapter.Update(invClerkDataDataSet.WO_FlangeMillBundles);
        wO_HeadMillBundlesTableAdapter.Update(invClerkDataDataSet.WO_HeadMillBundles);
        wO_WebMillBundlesTableAdapter.Update(invClerkDataDataSet.WO_WebMillBundles);
        int rowsaffected = wO_MillTableAdapter.Update(invClerkDataDataSet.WO_Mill);

        MessageBox.Show(invClerkDataDataSet.WO_Mill.Rows[0]["GasReading"].ToString());
        MessageBox.Show(rowsaffected.ToString());
    }

你可以看到函数中的第四个更新使用了与其余部分相同的功能,我只是添加了一些调试内容。前三个表绑定到DataGridViews并且工作正常。第四个表的成员绑定到各种文本框。

当我更改绑定到GasReading列的文本框中的值并单击save时,第一个MessageBox实际上显示了新值,因此它正确地将其放入数据集中。但是,受影响的行始终显示为0,并且实际数据库中的值未更新。

有人能看到我的问题吗?我知道问题必须在我的代码的其他地方,因为四种更新方法是相同的,但我只是不知道从哪里开始。

这是我的绑定代码:

        txtHours.DataBindings.Add("Text", invClerkDataDataSet.WO_Mill, "HoursRun");
        txtGasReading.DataBindings.Add("Text", invClerkDataDataSet.WO_Mill, "GasReading");
        txtDelayMins.DataBindings.Add("Text", invClerkDataDataSet.WO_Mill, "DelayMins");
        txtGapMins.DataBindings.Add("Text", invClerkDataDataSet.WO_Mill, "GapMins");

我知道有更复杂的绑定方式,但绑定不是问题。同样,数据正在从绑定的文本框到数据表中,但它们并没有从那里到数据库。

1 个答案:

答案 0 :(得分:3)

  1. 最好在Adapter.Update()之前调用wO_MillDataSource.EndEdit()。从控件中提取所有更改。

  2. 如果第4个表与其他表之间存在外键关系,则必须拆分插入/更新和删除操作,或使用TableAdaptermanager