简单表适配器更新失败

时间:2013-06-06 20:45:02

标签: c# sql-server winforms

我收到一条错误消息:

  

在传递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窗体如下所示:

enter image description here

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

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

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

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

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

如果我注释掉标记的代码行,那么它会通过ok运行,但是使用此行我会收到先前的详细错误。

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

1 个答案:

答案 0 :(得分:0)

In this MSDN posting

  

试试这个,它对我有用:

     

转到设计师编辑数据集(你可以从“数据”去那里)   菜单然后“显示数据源”和“使用设计器编辑数据集”。

     

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

     

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