C#帮助用外键填充DataTables

时间:2013-03-09 18:17:23

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

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

相关的SQL Server数据库结构:

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

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

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

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

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

  

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

感谢您的帮助

1 个答案:

答案 0 :(得分:1)

这些事情非常挑剔。

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

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

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

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

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

100x中的99x,当我遇到这个问题时,它是一个微小的东西,让我感到困惑。