2016-10-30 40 views
0

我正在加載父記錄的子集和子記錄到數據集,然後設置datarelations和foreignkeyconstraints,所以當我構建dataadapter select stmt for孩子記錄,我必須確保只加載父母在場的孩子記錄,以避免參考完整性錯誤。由於ParentTable的子集已加載到數據集中,所以我試過:加載數據集其中dataadapter select命令使用IN子句與子查詢

daChild = new OleDBDataAdapter(CreateOledbCommand(「select * from Childtable where ChildKey in(ds.tables(」「ParentTable」「))」,dconn) )

但是得到了一個「未定義的函數'ds.tables'表達式」運行時錯誤。

所以,我試圖創建一個列表傳遞給IN子句,像這樣:

昏暗名爲myDataView作爲數據視圖=新數據視圖(ds.tables( 「ParentTable」))

昏暗MyTempParentTable如數據表= MyDataView.ToTable(假, 「ParentKey」)

daChild =新OleDbDataAdapter的(CreateOledbCommand( 「SELECT * FROM ChildTable其中ChildKey在(MyTempParentTable)」,dconn))

我在調試器中檢查和MyTempParentT實際上,它是一個包含ParentTable關鍵字的列表。我認爲IN子句可以將一列數據作爲有效輸入。顯然不是,因爲我在運行時出現「沒有給出一個或多個必需參數的值」錯誤。

我只是出於想法。我所有的谷歌搜索的IN子句都是IN(value1,value2,value3 ...),並且沒有給出包含更復雜表達式的IN子句的任何示例。 任何人都可以告訴我我錯過了什麼,或者可能有不同的方式來實現這一目標?我試圖讓IN子句工作,因爲我認爲這是最有效的方法來做到這一點...也許它不是......感謝您的任何幫助。

回答

0

我還沒有找到關於爲什麼IN子句不起作用的問題的答案,但爲防萬一別人有這個問題我會發布我的解決方法。

我像往常一樣加載父記錄,但我的dataadapter選擇stmt爲子記錄有一個「WHERE 1 = 0」,以便零記錄最初加載。當顯示一個新的父記錄時,我會確定是否該父記錄的子記錄已經加載到數據集中,如果沒有,我加載它們。底線是,我不預先加載子記錄,而是I根據需求加載它們。這個解決方案對我來說很好。