【问题标题】:TableAdapter.Update not workingTableAdapter.Update 不工作
【发布时间】:2010-03-22 23:13:20
【问题描述】:

这是我的功能:

    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 列的文本框中的值并单击保存时,第一个 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");

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

【问题讨论】:

  • 什么是“MessageBox.Show(invClerkDataDataSet.WO_Mill.Rows[0].RowState.ToString());”返回?
  • 显示不变。我对此进行了一些模仿,但没有奏效。当我执行“invClerkDataDataSet.WO_Mill.Rows[0].SetModified();”时然后进行了更新,它说影响的行= 1,但是它自动将绑定文本框中的文本设置回原始值。

标签: c# sql sql-update tableadapter


【解决方案1】:
  1. 在 Adapter.Update() 之前调用 wO_MillDataSource.EndEdit() 是个好主意。从控件中提取所有更改。

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

【讨论】:

  • 1.我找不到那样的东西。 2. 没有外键关系。
  • 啊,我找到了,谢谢。我必须在数据表中的行上调用 .EndEdit()。
  • @Wesley:您可能应该使用 BindingSource(s) 将控件链接到表格。让生活更轻松。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-04-22
  • 2011-10-07
  • 1970-01-01
  • 2010-11-26
  • 1970-01-01
  • 2011-01-26
  • 2015-06-16
相关资源
最近更新 更多