You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用VB.NET DataRow类从SQL关联表获取数据的问题

解决方案

方法一:使用SQL JOIN一次性获取关联数据

直接修改查询语句,通过INNER JOIN关联三个表,把需要的客户和产品字段一并查询出来,遍历DataRow时即可直接读取对应值。

修改后的VB代码示例:

' 构造关联查询的SQL语句
dim da as New SqlClient.SqlDataAdapter( _
    "SELECT o.id AS OrderId, o.date AS OrderDate, " & _
    "c.name AS CustomerName, c.surname AS CustomerSurname, " & _
    "p.name AS ProductName " & _
    "FROM Orders o " & _
    "INNER JOIN Customers c ON o.customerId = c.id " & _
    "INNER JOIN Products p ON o.productId = p.id", conn)

dim ds as New DataSet
da.fill(ds, vt)

For each dr as DataRow in ds.Tables(vt).rows
    orderId = dr("OrderId")
    orderDate = dr("OrderDate")
    ordererName = dr("CustomerName")
    ordererSurname = dr("CustomerSurname")
    productName = dr("ProductName")
    ' 后续业务逻辑
Next

说明:

  • 用表别名(o、c、p)简化SQL语句结构
  • 给字段取别名(如OrderId、CustomerName)避免不同表的同名字段冲突
  • 如果需要包含无对应客户/产品的订单,可将INNER JOIN替换为LEFT JOIN

方法二:使用DataSet的DataRelation关联表

若需要保留DataSet中三个表的独立结构,可分别填充三个表后创建数据关联,再通过DataRow的关联方法获取对应数据。

示例代码:

' 分别填充三个表到DataSet
dim daOrders as New SqlClient.SqlDataAdapter("SELECT * FROM Orders", conn)
dim daCustomers as New SqlClient.SqlDataAdapter("SELECT * FROM Customers", conn)
dim daProducts as New SqlClient.SqlDataAdapter("SELECT * FROM Products", conn)

dim ds as New DataSet
daOrders.Fill(ds, "Orders")
daCustomers.Fill(ds, "Customers")
daProducts.Fill(ds, "Products")

' 创建Orders与Customers的关联关系
ds.Relations.Add("OrderToCustomer", _
    ds.Tables("Customers").Columns("id"), _
    ds.Tables("Orders").Columns("customerId"))

' 创建Orders与Products的关联关系
ds.Relations.Add("OrderToProduct", _
    ds.Tables("Products").Columns("id"), _
    ds.Tables("Orders").Columns("productId"))

' 遍历订单并获取关联数据
For each drOrder as DataRow in ds.Tables("Orders").Rows
    orderId = drOrder("id")
    orderDate = drOrder("date")
    
    ' 获取关联的客户行数据
    dim drCustomer as DataRow = drOrder.GetParentRow("OrderToCustomer")
    ordererName = drCustomer("name")
    ordererSurname = drCustomer("surname")
    
    ' 获取关联的产品行数据
    dim drProduct as DataRow = drOrder.GetParentRow("OrderToProduct")
    productName = drProduct("name")
    
    ' 后续业务逻辑
Next

说明:

  • GetParentRow方法通过关联名称获取父表(Customers、Products)的对应行
  • 该方法适合需要多次操作不同表数据的场景,比如后续需更新客户或产品信息

内容的提问来源于stack exchange,提问作者ilkay kurt

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.04 15:07:17