2016-10-30 4 views
0

親レコードと子レコードのサブセットをデータセットにロードしてからdatarelationsとforeignkeyconstraintsを設定するので、dataadapter select stmtをビルドするとき子レコードの場合、参照整合性エラーを避けるために、親が存在する子レコードのみがロードされていることを確認する必要があります。dataadapter selectコマンドがサブクエリでIN句を使用するローディングデータセット

daChild = new OleDBDataAdapter(CreateOledbCommand( "select * from ChildTable from(ds.tables(" ParentTable "")) "、dconn)は、親テーブルのサブセットがデータセットにロードされたため、 )

しかし、実行時に「未定義関数 'ds.tables' in式」エラーが発生しました。

だから、私はこのように、IN句に渡す1つの列のテーブルを作成しようとしました:

薄暗いMyDataViewのDataView =新しいDataViewの(ds.tables( "ParentTable"))として

薄暗いですDataTable = MyDataView.ToTable(偽、 "ParentKey")

daChild =新OleDbDataAdapterおよ(CreateOledbCommand(、dconn) "(MyTempParentTable)でChildKey ChildTable SELECT * FROM")私は、デバッガでチェック

をとしてMyTempParentTable 、およびMyTempParentT ableは、実際には、ParentTableのキーを含む1つの列テーブルです。私はIN句が有効な入力として1列のデータテーブルを取ることができると思った。どうやら、実行時に「1つ以上の必須パラメータに値が指定されていません」というエラーが表示されているようです。

私はちょっと考えられていません。すべての私のGoogleの検索はIN句のために思い付いた(value1、value2、value3 ...)のようなものであり、より複雑な式を含むIN句の例は示していません。 私は誰かが私が行方不明、またはこれを達成するための別の方法で私を手がかりにすることができますか?私は、IN節が動作するようにしようとしています。なぜなら、これを行うのが最も効率的な方法だと思っているからです...多分、そうではありません。

答えて

0

なぜIN句がうまくいかなかったのかという質問に対する回答は見つかりませんでしたが、他の誰かがこの問題を抱えている場合は、回避策を投稿します。

親レコードはいつものようにロードされますが、子レコードのdataadapter select stmtには、最初のレコードがロードされないように「WHERE 1 = 0」があります。新しい親レコードが表示されたら、その親レコードの子レコードがすでにデータセットにロードされているかどうかを確認し、そうでない場合はロードします。ボトムラインは、子レコードを事前ロードせず、それらを「オンデマンド」にロードします。このソリューションは私のためにうまくいきます。

関連する問題