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