2013-03-09 59 views
0

在Visual Studio Designer中,我創建了一個具有2個DataTable的DataSet; EmployeeDTPayrollSheetDT它通過SELECT語句從SQL Server中提取數據。這兩個DataTable通過SSN列有關係。C#幫助用外鍵填充數據表

相關的SQL Server數據庫結構:

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

在我的PayrollSheet表單中,我有多個組合框,我綁定了DataSource,DisplayMember和DataTable的數據表的。當我啓動程序時,我成功地單擊「Driver」組合框中的向下箭頭,選擇一個驅動程序名稱,並讓其他組合框顯示該驅動程序/ SQL記錄中的信息 - 因爲它們綁定到相同的DataSource。

我還在組合框旁邊有一個列表框,目標是顯示PSDate,無論在組合框中選擇了SSN

列表框是我的問題。我需要能夠更改任何組合框中的值,並將PSDate顯示在列表框中。我不知道這是否可以完成,因爲PayrollSheetDT DataTable執行靜態SQL查詢,但我想要的是相當於添加一個WHERE SSN = <selected ssn in other datatable>

我沒有很好的理解如何做到這一點,但如果我嘗試填補TableAdapter,我得到以下錯誤:

One or more rows contain values violating non-null, unique, or foreign-key constraints.

感謝您的幫助

+0

你100%正確,PSDate在SQL數據庫中被標記爲NOT NULL。一旦解決了,一切都按預期工作。非常感謝你! – user1429195 2013-03-10 16:27:28

回答

1

這些東西都是非常finickly。

該錯誤可能意味着一些事情。嘗試(暫時)刪除PayrollSheet表並只填充Employee表。

確保您的列名稱與sql查詢匹配,就像列名稱的短詞/短語完全匹配一樣。 EmployeeLastName與EmployeeLName不同。

確保沒有一個「額外」 PayrollSheet行不具有父行(回員工),又名,在PayrollSheet孤兒行。

這是一個通用的幫手。嘗試填充一個DataSet對象(只是「DataSet」,而不是一個強類型的)...然後做一個ds.WriteXml(@「C:\ myds.xml」),然後通過該XML並確保列名字匹配。

也..check數據類型。檢查一個列(在ds定義中)未被標記爲「not null」,然後查詢爲某行返回空值。這是一種蜱蟲問題,我很確定。

100x中有99x,當我遇到這個問題時,它是一個微小的東西,讓我很難受。

+0

+1提供了很好的建議。 – 2013-03-11 00:59:21

+0

DataTable上還有一個'GetErrors()'方法,返回包含消息的錯誤行(調用'Adapter.Fill()'後) - 它只是一個沒有錯誤代碼的詳細消息,但仍然可以獲得想法出現在哪裏 – mfeineis 2014-04-14 11:16:29