0

我收到一条错误消息:

传递 DataRow 集合时需要有效的 UpdateCommand

我提供的更新命令与前面的代码行非常相似 - 我该如何解决这个问题?

使用的数据库非常简单。具有一对多关系的两个表:

CREATE TABLE [db].dbo.tb_TestHOLDERx
    (
    HolderID VARCHAR(5) NOT NULL,
    Name VARCHAR(30),
    "Address" VARCHAR(30),
     CONSTRAINT tb_pkx PRIMARY KEY (HolderID)
    );
    GO
CREATE TABLE [db].dbo.tb_TestALLOTMENTx
    (
    Number  INT NOT NULL,
    HolderID VARCHAR(5) NOT NULL,
    "Length" INTEGER NOT NULL,
    Paid VARCHAR(5) NOT NULL,
    FloodRisk VARCHAR(10) NOT NULL,
     CONSTRAINT tb_pkax PRIMARY KEY (Number,HolderID),
     CONSTRAINT tbx_fkx FOREIGN KEY (HolderID)
     REFERENCES dbo.tb_TestHOLDERx(HolderID)
    );
    GO

INSERT INTO [db].dbo.tb_TestHOLDERx
    values
    ('B14','ROY', '3 Stern Way'),
    ('N7','Jamela', '15 Jeune Street');
    GO 
INSERT INTO [db].dbo.tb_TestALLOTMENTx
    values
    (1,'B14',30,'No','Low'),
    (2,'N7',30,'Yes','Medium'),
    (3,'N7',15,'Yes','High');
    GO

Windows 窗体如下所示:

在此处输入图像描述

按钮“使用组合 ID”单击事件的处理程序是:

private void useComboID_Click(object sender, EventArgs e) {
     if(combHOLDER.SelectedIndex!=-1) {
                allotHOLDERid.Text = combHOLDER.Text;
     }
}

然后用右上角组合框中选择的值覆盖左侧文本框中的值。

然后使用 Save to DB 按钮尝试将更改保存到本地数据集,然后使用以下事件处理程序更新数据库:

private void saveChanges_Click(object sender, EventArgs e) {
    tbTestHOLDERxBindingSource.EndEdit();
    tbTestALLOTMENTxBindingSource.EndEdit();
    try {
        tb_TestHOLDERxTableAdapter.Update(wHAnalysisDataSet.tb_TestHOLDERx);
        tb_TestALLOTMENTxTableAdapter.Update(wHAnalysisDataSet.tb_TestALLOTMENTx); //<<<<<<ERROR HERE
        MessageBox.Show("ok");
    } catch(Exception x) {
        MessageBox.Show(x.Message);
    }
}

如果我注释掉标记的代码行,那么它可以正常运行,但是通过这一行,我得到了以前详细的错误。

如何修改更新以便将更改写回数据库?

4

1 回答 1

0

在这个 MSDN 帖子中

试试这个,它对我有用:

使用设计器编辑数据集(您可以从“数据”菜单转到“显示数据源”和“使用设计器编辑数据集”。

右键单击适配器并选择“配置”。单击“高级选项”。确保选中“刷新数据表”。单击确定并完成。

告诉我它是否有效。祝你好运。

于 2013-06-06T21:19:26.387 回答