1

問題をできるだけ単純化するように努めます。

私の英語をコメントして訂正してください。あなたが私を理解できることを願っています。

私の主な質問は 、データセット内のテーブルを他のテーブルのデータに関連する行のみで埋める、簡単で「自動化された」方法はありますか?

たとえば、次のスキーマを持つデータベースがあるとします。

データベーススキーマ

今、私はテーブル「Orders」で同じことを作成し、カスタムメソッド「FillByDate」を作成しようとしています。動作しますが、小さな問題があります。

        DataSet1 myDataSetInstance = new DataSet1();
        DataSet1TableAdapters.OrdersTableAdapter OrdersTA = new DataSet1TableAdapters.OrdersTableAdapter();

        OrdersTA.FillByDate(myDataSetInstance.Orders, new DateTime(2013, 1,1), DateTime.Now);

        foreach (var row in myDataSetInstance.Orders)
        {
            MessageBox.Show(row.Comments); // OK
            MessageBox.Show(row.CustomersRow.Name); //NULL
        }

Customersテーブルから関連する行を取得することは不可能です。最初に、そのテーブルに手動で入力する必要があります。私はこれを行うための2つの方法を見ることができます

  • このテーブルのコンテンツ全体を取得します-しかし、それは多くの不要なデータになります
  • TableAdapterにカスタムクエリを作成します(FillByOrdersByDate(@ Date1、@ Date2)など)。テーブルが2つとリレーションが1つしかない場合は簡単ですが、テーブルが多いと、TableAdapterごとに数十のカスタムクエリが必要になります。

これを行うには「より良い」方法が必要だと私は本当に信じています。

4

2 に答える 2

0

これにアプローチする方法はいくつかあります。データを読み取るだけの場合は、結合クエリを使用してデータセットにデータを入力できます。または、結合クエリを使用して子テーブルにデータを入力することもできます。あなたの例を見て、特定の都市のすべての顧客の顧客と注文をリストしたいとします。Customers TA の 'FillbyCity' クエリを既に作成しています。Orders TA についても同様の FillbyCity クエリを作成します。はい、顧客テーブルへの結合を使用してこれを行うことができます: SELECT Orders.* FROM Orders INNER JOIN customers ON customers.customerid = orders.customerid WHERE customers.city = @cityアプリケーションの要件に応じて注文します。

(David Sceppa の 'Programming ADO.Net 2.0' をお持ちの場合は、これについては第 7 章で説明します)

「しかし、より多くのテーブルを使用すると、この方法では TableAdapter ごとに数十のカスタム クエリが必要になります。」なぜ数十?私はあなたがそれでどこに行くのか分かりません。

(追記: あなたの英語は、それとそれを混同することを除けば問題ありませんが、多くのネイティブ スピーカーもそうしています. .)

于 2013-03-11T02:22:08.203 に答える
0

あいまいなものがあります...それを何と呼ぶべきかさえわかりません-ADO.NET SQL拡張機能または何か-探している関係を記述し、ADO.NETがその「特別な」SQLを使用するSHAPEと呼ばれるコマンド関連する複数のテーブルを適切に含むデータセットを提供します。

   SHAPE  {select * from customers}
   APPEND ({select * from orders} AS rsOrders
           RELATE customerid TO customerid)

美しく機能しますが、古くてほとんどサポートされていないと思います

MS は、SHAPE プロバイダーを減価償却し、代わりに XML を使用することを提案しています (申し訳ありませんが、リンクを失いましたが、.NET 1.1 に戻っていました)、彼らは XML を指していました。FOR XMLT-SQL 句がうまく機能していると思います。FOR XML を使用DataSetて.

于 2013-05-10T18:30:48.280 に答える