[英]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
}
從客戶表中獲取相關行是不可能的-首先,我必須手動填寫該表。 我可以看到兩種方法
我真的相信,必須有“更好”的方法來做到這一點。
有幾種方法可以解決此問題-如果您只打算讀取數據,則可以使用聯接查詢來填充數據集。 或者,您可以使用聯接查詢來填充子表。 查看您的示例,假設您想列出特定城市中的所有客戶和客戶。 您已經為客戶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.