C# 简单表适配器更新失败
我收到一条错误消息: 传递DataRow集合时需要有效的UpdateCommand 我提供的update命令与前一行代码非常相似-如何修复此问题 使用的数据库非常简单。具有一对多关系的两个表:C# 简单表适配器更新失败,c#,sql-server,winforms,C#,Sql Server,Winforms,我收到一条错误消息: 传递DataRow集合时需要有效的UpdateCommand 我提供的update命令与前一行代码非常相似-如何修复此问题 使用的数据库非常简单。具有一对多关系的两个表: CREATE TABLE [db].dbo.tb_TestHOLDERx ( HolderID VARCHAR(5) NOT NULL, Name VARCHAR(30), "Address" VARCHAR(30), CONSTRAINT tb_pkx PRIM
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);
}
}
private void saveChanges\u单击(对象发送方,事件参数e){
tbTestHOLDERxBindingSource.EndEdit();
TBTestAllotionXBindingSource.EndEdit();
试一试{
tb_TestHOLDERxTableAdapter.Update(wHAnalysisDataSet.tb_TestHOLDERx);
tb_testallotionxtableadapter.Update(wHAnalysisDataSet.tb_testallotionx);//
试试这个,它对我有用:
使用designer进入编辑数据集(您可以从“数据”窗口进入)
然后菜单“显示数据源”和“使用设计器编辑数据集”
右键单击适配器并选择“配置”。单击“高级”
选项”。确保选中“刷新数据表”。单击“确定”
然后结束
告诉我它是否有效。祝你好运
如何为适配器生成其他命令?自动使用SqlCommandBuilder或手动编码?我猜您的适配器错过了UpdateCommand。@KingKing数据集中只有两个表。这两个适配器都是在我将控件绑定到这些表时自动生成的。@KingKing ok-找到了答案,我将在下面发布它很高兴知道您已经解决了它。我不熟悉使用向导。我喜欢手动编码。:)@KingKing我怀疑使用代码或使用向导的解决方案会涉及相同的属性。我喜欢代码。与表适配器和绑定源相关的向导对我来说真的越来越强大-它们看起来非常强大,节省了很多时间。但是它们使跟踪bug变得非常棘手:)我同意,我肯定会学习如何使用se wizard,事实上只有一些我还没有学会的向导。而且所有的向导似乎都涉及数据库项目。虽然我对数据库项目不是很感兴趣。我喜欢图形、系统和高级算法相关的项目:)