簡體   English   中英

在類型化數據集中填充多個表

[英]Populating multiple tables in typed dataset

我將嘗試盡可能簡化我的問題。

隨時發表評論並糾正我的英語。 希望你能理解我。

我的主要問題是: 是否有任何簡單且“自動化”的方法,僅用與其他表中的數據相關的行來填充數據集中的表?

假設我們的數據庫具有以下架構:

數據庫架構

現在,我試圖用表“ 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
        }

從客戶表中獲取相關行是不可能的-首先,我必須手動填寫該表。 我可以看到兩種方法

  • 獲取此表的全部內容-但這將是很多不需要的數據
  • 在TableAdapter中創建自定義查詢-類似於FillByOrdersByDate(@ Date1,@ Date2)-很容易,當我只有2個表和1個關系時,但是對於更多表,此方法將為每個TableAdapter要求數十個自定義查詢。

我真的相信,必須有“更好”的方法來做到這一點。

有幾種方法可以解決此問題-如果您只打算讀取數據,則可以使用聯接查詢來填充數據集。 或者,您可以使用聯接查詢來填充子表。 查看您的示例,假設您想列出特定城市中的所有客戶和客戶。 您已經為客戶TA編寫了“ FillbyCity”查詢-您將為訂單ta編寫類似的FillbyCity查詢。 是的,您可以使用對客戶表的聯接來執行此操作:SELECT Orders。* FROM Orders INNER JOIN客戶ON customer.customerid = orders.customerid WHERE customer.city = @city然后,您將使用數據關系將單個客戶鏈接到他們訂單,具體取決於您的應用程序的要求。

(如果您有David Sceppa的“ Programming ADO.Net 2.0”,請在第7章中解決)

“但是對於更多表,此方法將為每個TableAdapter要求數十個自定義查詢。” 為什么幾十? 我不確定你要去哪里。

(請注意,您的英語很好,除了將英語和英語混在一起以外,但是很多母語為英語的人也可以這樣做。)

有一個晦澀的...甚至不知道該怎么稱呼-ADO.NET SQL擴展之類的東西-稱為SHAPE的命令,它描述您要查找的關系,而ADO.NET使用該“特殊” SQL為您提供一個很好地包含多個相關表的數據集。

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

它工作得很漂亮,但我認為它已經過時了,幾乎沒有(沒有)支持

MS建議將SHAPE提供程序折舊並改為使用XML(對不起,丟失了鏈接,但是回到了.NET 1.1),他們指向了XML。 我認為FOR XML T-SQL子句可以解決問題。 我還沒有自己做(我),在這里我使用FOR XML填充了DataSet ,但是如果您按照答案中的鏈接, 我會留下另一個類似的問題,我認為它會起作用。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM