首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> .NET 網頁程式設計 >> ASP.NET 基礎 >> 關於ASP.NET

ASP.NET 2.0 資料教程 69:TableAdapter 使用 JOIN 與 Correlated Subquery 比較、自動產生 INSERT/UPDATE/DELETE 限制與解決方案

     編輯:關於ASP.NET

前言

多表關聯查詢可用 Correlated Subquery 或 JOIN。TableAdapter 精靈若偵測主查詢含 JOIN,不會自動產生 InsertCommand/UpdateCommand/DeleteCommand。本文比較兩種寫法、分析限制與因應策略。

Correlated Subquery 範例 (第一章預設)

SELECT ProductID, ProductName, ...,
    (SELECT CategoryName FROM Categories WHERE Categories.CategoryID = Products.CategoryID) as CategoryName,
    (SELECT CompanyName FROM Suppliers WHERE Suppliers.SupplierID = Products.SupplierID) as SupplierName
FROM Products
  • 優點:單一資料表為主,精靈可自動產生 CUD 命令。
  • 缺點:子查詢逐行執行,大量資料效能較差。

JOIN 寫法

SELECT ProductID, ProductName, Products.SupplierID, Products.CategoryID, ...,
    Categories.CategoryName,
    Suppliers.CompanyName as SupplierName
FROM Products
LEFT JOIN Categories ON Categories.CategoryID = Products.CategoryID
LEFT JOIN Suppliers ON Suppliers.SupplierID = Products.SupplierID
  • 優點:集合運算效能佳、語法標準、易維護。
  • 缺點:TableAdapter 精靈拒絕自動產生 CUD 命令(無法判斷更新目標表)。

解決方案

  1. 手動設定 Insert/Update/Delete Command:在 TableAdapter 屬性視窗指定純 Products 表的 CUD SQL。
  2. 改用 Stored Procedure:SP 內部使用 JOIN 查詢,CUD 另寫針對單表的 SP,TableAdapter 對應各 SP。
  3. View + INSTEAD OF Trigger:建立 View 封裝 JOIN,配合 Trigger 處理更新(進階)。

結語

JOIN 是關聯查詢首選,但需配合手動 CUD 設定或 Stored Procedure 架構。理解 TableAdapter 精靈限制,能在設計階段做正確技術選型。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved