我收到一条错误消息:
传递 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);
}
}
如果我注释掉标记的代码行,那么它可以正常运行,但是通过这一行,我得到了以前详细的错误。
如何修改更新以便将更改写回数据库?