我收到一条错误消息:
在传递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;
}
}
然后,使用右上角组合框中选择的值覆盖左侧文本框中的值。
然后使用“保存到数据库”按钮,我尝试将更改保存到本地数据集,然后使用以下事件处理程序更新数据库:
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运行,但是使用此行我会收到先前的详细错误。
如何修改更新以便将更改写回数据库?
答案 0 :(得分:0)
试试这个,它对我有用:
转到设计师编辑数据集(你可以从“数据”去那里) 菜单然后“显示数据源”和“使用设计器编辑数据集”。
右键单击适配器并选择“配置”。单击“高级” 选项“。确保选中”刷新数据表“。单击”确定“ 并完成。
告诉我它是否有效。祝你好运。