0

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

相关SQL Server数据库结构:

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

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

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

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

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

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

谢谢你的帮助

4

1 回答 1

1

这些东西非常挑剔。

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

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

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

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

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

100 倍中的 99 倍,当我遇到这个问题时,这是一件让我很头疼的小事。

于 2013-03-11T00:46:26.313 回答