【问题标题】:C# Help filling DataTables with foreign keysC# 帮助用外键填充 DataTables
【发布时间】:2013-02-25 04:34:34
【问题描述】:

在 Visual Studio 设计器中,我创建了一个包含 2 个数据表的数据集; EmployeeDTPayrollSheetDT 通过 SELECT 语句从 SQL Server 中提取数据。这两个数据表通过SSN 列建立关系。

相关的SQL Server数据库结构:

  • 表:Employee,列:SSN(主键),Driver
  • 表:PayrollSheet,列:SSN(外键),PSDate

在我的 PayrollSheet 表单中,我有多个组合框,其中绑定了 EmployeeDT 数据表的 DisplayMemberValueMember。当我启动程序时,我成功单击“驱动程序”组合框中的向下箭头,选择驱动程序名称,并让其他组合框显示来自该驱动程序/SQL 记录的信息 - 因为它们绑定到相同的数据源。

我在组合框旁边还有一个列表框,目的是在组合框中选择SSN 时显示PSDate

列表框是我的问题。我需要能够更改任何组合框中的值,并将 PSDate 显示在列表框中。我不知道这是否可以做到,因为 PayrollSheetDT DataTable 执行静态 SQL 查询,但我想要的是相当于添加 WHERE SSN = <selected ssn in other datatable>

我不太了解如何执行此操作,但如果我尝试填写 TableAdapter,则会收到以下错误:

一行或多行包含违反非空、唯一或外键约束的值。

感谢您的帮助

【问题讨论】:

  • 您 100% 正确,PSDate 在 SQL 数据库中被标记为 NOT NULL。一旦修复,一切都按预期工作。非常感谢!

标签: c# sql-server visual-studio-2012 datatable dataset


【解决方案1】:

这些东西非常挑剔。

这个错误可能意味着一些事情。尝试(暂时)删除 PayrollSheet 表并仅填充 Employee 表。

确保您的列名与 sql 查询匹配,例如列名的短词/短语完全匹配。 EmployeeLastName 与 EmployeeLName 不同。

确保没有“额外的”PayrollSheet 行没有父行(返回给 Employee),也就是 PayrollSheet 中的孤立行。

这是一个通用助手。尝试填充一个 DataSet 对象(只是“DataSet”,而不是强类型对象)...然后执行 ds.WriteXml(@"C:\myds.xml") 然后通过该 xml 并确保该列名称匹配。

另外..检查数据类型。检查列(在 ds 定义中)是否未标记为“非空”,然后查询为某行返回空值。我很确定,这是某种滴答声问题。

100 倍中的 99 倍,当我遇到这个问题时,它是一个非常微小的东西,让我搞砸了。

【讨论】:

  • DataTables 上还有一个 GetErrors() 方法,它返回带有错误的行,包括一条消息(在调用 Adapter.Fill() 之后) - 这只是一条没有错误代码的详细消息,但您仍然可以获得问题出在哪里的想法
猜你喜欢
  • 2014-06-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-07-06
  • 1970-01-01
  • 2019-06-06
相关资源
最近更新 更多