4

MS Access 2003データベースに接続された強く型付けされたデータセットを実装するC#アプリケーション(VS 2010プレミアムを使用)があります。このデータセット内に、SQLスクリプトが次のテーブルアダプターを実装しています。

SELECT [ID], [Name], [Created By]
FROM [Table Group]
WHERE [Created By] = ?
AND [ID] IN (SELECT [Group ID] FROM [Table Clustering] WHERE [Cluster ID] = ?)
ORDER BY [Name]

問題は、何も返さないことですが、おそらく返されるはずです(データベースにサンプルデータがあります)。私はすでにMSAccess内に同じスクリプトを実装しようとしました(?sを実際のデータに置き換えます)、そしてそれは私が期待するデータを返します。

"WHERE [Cluster ID] = ?"埋め込まれたSELECTステートメントを削除して実験したところ、データが返されましたが、それは私が必要としているものではありません。

また、?を置き換えて別の実験を行いました。実際の[クラスターID]を含む埋め込みSELECTステートメント内でデータが返されましたが、これも私が必要としているものではありません。

では、テーブルアダプタ内のSQLスクリプトの問題は何ですか?SELECT内にSELECTを実装することはできますか?さらに、それは実装することができますか?SELECT内のSELECTで?どうやって?

ありがとう!=)

私が取っていた強く型付けされたデータセット

テーブルアダプタの作成に使用しているSQLビルダー

予想通り、IDEは私が行ったテーブルアダプタのメソッド(データを取得するため)を自動的に生成します。コード内にSQLスクリプトを手動で作成する必要はありません...すべての人の情報(慣れていない場合) 、生成されたメソッドは2つのパラメーターを要求します(予想どおり)。1つは[作成者]用、もう1つは[クラスターID]用です...これからは、上記の私の問題を参照してください。:D

4

1 に答える 1

0

これは IDE のバグだと思います。具体的には、2 つのパラメーターがあるため、param1 と param2 をこの順序で指定します。あなたは「?」と思うでしょう。プレースホルダは同じ順序ですが、クエリを実行して IDE から値を入力するように求められると、最後の「?」は最初のパラメーター (クラスター ID) で、最初のパラメーター (CreatedBy) は 2 番目のパラメーターです。この図は、私が何を意味するかを示しています。

VS2012

画像では、TableAdaptor には最初にイベント カウント、2 番目に ID がありますが、ID は最初の行で、イベント カウントは 2 番目の行です。プログラムを介してパラメーターを渡そうとはしませんでしたが、IDE がこのように動作するのはバグのようです。

于 2013-04-18T11:38:57.823 に答える