Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/27.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 简单表适配器更新失败_C#_Sql Server_Winforms - Fatal编程技术网

C# 简单表适配器更新失败

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

我收到一条错误消息:

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

我提供的update命令与前一行代码非常相似-如何修复此问题

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

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,事实上只有一些我还没有学会的向导。而且所有的向导似乎都涉及数据库项目。虽然我对数据库项目不是很感兴趣。我喜欢图形、系统和高级算法相关的项目:)