Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/iphone/44.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#_Ado.net_Bindingsource_Master Detail - Fatal编程技术网

C# 将子记录保存到数据库时出现问题

C# 将子记录保存到数据库时出现问题,c#,ado.net,bindingsource,master-detail,C#,Ado.net,Bindingsource,Master Detail,乍一看,我意识到这个问题已经被问过很多次了——我想我已经读过/搜索过很多次了——我已经非常努力地检查我找到的每一条建议- 也许我只需要另一双眼睛 问题是: 我有一个主表和两个明细表。它们在我的数据源中的定义与在数据库中的定义完全相同,具有相同的关系和key/FK字段/类型 我可以手动将数据输入表中,在查询(左连接等)时得到预期的结果。此外,我还可以在应用程序中正确地查看记录-连接到正确的父记录 但是,这些表/绑定源中只有一个工作正常。 我找遍了所有我知道要找的地方,却看不出有什么不同 Barge

乍一看,我意识到这个问题已经被问过很多次了——我想我已经读过/搜索过很多次了——我已经非常努力地检查我找到的每一条建议-

也许我只需要另一双眼睛

问题是: 我有一个主表和两个明细表。它们在我的数据源中的定义与在数据库中的定义完全相同,具有相同的关系和key/FK字段/类型

我可以手动将数据输入表中,在查询(左连接等)时得到预期的结果。此外,我还可以在应用程序中正确地查看记录-连接到正确的父记录

但是,这些表/绑定源中只有一个工作正常。 我找遍了所有我知道要找的地方,却看不出有什么不同

BargeDetails tablebinding源代码非常有效。 ShiftDeadTime不会将记录保存/插入数据库

我已检查,bindingsource.count=1,而底层bindingsource.current具有预期值

SQL跟踪显示没有插入/更新的尝试

我正在使用Visual Studio 2010、ADO.NET、.NET 4和WinForms以及SQL Server 2008。 数据源是设计的,而不是首先使用设计器编写代码。 我将细节绑定源更改为指向正确的datasource/datamember=FK

在我的_Load()-中,ta.fill()的顺序似乎正确

    private void frmShiftReport_Load(object sender, EventArgs e)
    {
         this.shiftsTableAdapter.Fill(this.dsShiftReport.Shifts);
        this.shiftDeadTimeTableAdapter.Fill(this.dsShiftReport.ShiftDeadTime);            
        this.bargeDetailTableAdapter.Fill(this.dsShiftReport.BargeDetail);

        this.vw_BargeLookupTableAdapter.Fill(this.dsShiftReport.vw_BargeLookup);
        this.vw_CommodityLookupTableAdapter.Fill(this.dsShiftReport.vw_CommodityLookup);
    }
bindingsources的设置似乎相同

shiftDeadTimeBindingSource

 datasource =    shiftsBindingSource1
 datamember =    FK_ShiftDeadTime_Shifts
datasource =     shiftsBindingSource1
datamember =     FK_BargeDetail_Shifts
BargedTailBindingSource

 datasource =    shiftsBindingSource1
 datamember =    FK_ShiftDeadTime_Shifts
datasource =     shiftsBindingSource1
datamember =     FK_BargeDetail_Shifts
dgShiftDeadTime

datasource = shiftDeadTimeBindingSource
在我的单击/保存事件中,看起来我有正确/相似的EndEdit()和UpdateAll()

最后,在datasource.designer.cs中- 两个关系/约束的设置似乎相同

fkc = new global::System.Data.ForeignKeyConstraint("FK_BargeDetail_Shifts", new global::System.Data.DataColumn[] {
                    this.tableShifts.IDColumn}, new global::System.Data.DataColumn[] {
                    this.tableBargeDetail.ShiftIDColumn});
    this.tableBargeDetail.Constraints.Add(fkc);
    fkc.AcceptRejectRule = global::System.Data.AcceptRejectRule.None;
    fkc.DeleteRule = global::System.Data.Rule.Cascade;
    fkc.UpdateRule = global::System.Data.Rule.Cascade;

    fkc = new global::System.Data.ForeignKeyConstraint("FK_ShiftDeadTime_Shifts", new global::System.Data.DataColumn[] {
                    this.tableShifts.IDColumn}, new global::System.Data.DataColumn[] {
                    this.tableShiftDeadTime.ShiftIDColumn});
    this.tableShiftDeadTime.Constraints.Add(fkc);
    fkc.AcceptRejectRule = global::System.Data.AcceptRejectRule.None;
    fkc.DeleteRule = global::System.Data.Rule.Cascade;
    fkc.UpdateRule = global::System.Data.Rule.Cascade;

    this.relationFK_BargeDetail_Shifts = new global::System.Data.DataRelation("FK_BargeDetail_Shifts", new global::System.Data.DataColumn[] {
                    this.tableShifts.IDColumn}, new global::System.Data.DataColumn[] {
                    this.tableBargeDetail.ShiftIDColumn}, false);
    this.Relations.Add(this.relationFK_BargeDetail_Shifts);

    this.relationFK_ShiftDeadTime_Shifts = new global::System.Data.DataRelation("FK_ShiftDeadTime_Shifts", new global::System.Data.DataColumn[] {
                    this.tableShifts.IDColumn}, new global::System.Data.DataColumn[] {
                    this.tableShiftDeadTime.ShiftIDColumn}, false);
    this.Relations.Add(this.relationFK_ShiftDeadTime_Shifts);

这快把我逼疯了

在这种情况下,我建议做什么:检查您的更改是否出现在数据集中 打电话

this.dsShiftReport.GetChanges();
这样您就可以知道更改是否至少反映在数据集中

我假设表单上有某种DataGridView控件,并将表绑定到DataGridView。我可能错了(我已经有一段时间没有使用WinForms和数据集了),但是如果在点击“保存”按钮之前点击“回车”和/或尝试移动到DataGridView中的另一行会怎么样?只是想知道在这种情况下是否会保存数据