zoukankan      html  css  js  c++  java
  • DataSet中表示表之间关系

        两表之间存在父子关系,可以使用DataReleation类表示。

        DataRelation对象用于描述DataSet中多个DataTable对象之间的关系。每个DataSet都包含DataRelations的Relations集合,以查找和操纵相关表。

    如下面代码,得到Customers表中各行中关联子表Orders表中的资料。


    using System.Data.SqlClient;

            
    string sConnection = "Data Source=scott;Initial Catalog=northwind;Persist Security Info=True;User ID=sa;Password=sa123";
            DataSet dsSet 
    = new DataSet();
            SqlDataAdapter sdaAdapter 
    = null;

            
    /// <summary>
            
    /// 显示表中资料
            
    /// </summary>
            private void ShowData()
            {
                
    //建立Connection
                SqlConnection scConnection = new SqlConnection(sConnection);
                
    //建立Customer表Command
                SqlCommand scCommand = scConnection.CreateCommand();
                scCommand.CommandText 
    = "select * from customers";
                
    //建立Adapter
                sdaAdapter = new SqlDataAdapter(scCommand);
                
    //得到数据
                sdaAdapter.Fill(dsSet, "customers");

                
    //建立Order表Command
                SqlCommand scOrderCommand = scConnection.CreateCommand();
                scOrderCommand.CommandText 
    = "select * from Orders";
                SqlDataAdapter sdaOrder 
    = new SqlDataAdapter(scOrderCommand);
                sdaOrder.Fill(dsSet, 
    "orders");

                
    //建立关联

                DataRelation drCustRelection = dsSet.Relations.Add("CustOrders"

    dsSet.Tables["customers"].Columns["CustomerID"], dsSet.Tables["Orders"].Columns["CustomerID"]);


                
    foreach (DataRow drCust in dsSet.Tables["customers"].Rows)
                {
                    DataTable dt 
    = null;
                    
    //通过Row.GetChildRows()方法得到子表资料
                    foreach (DataRow drOrders in drCust.GetChildRows(drCustRelection))
                    {
                        dt 
    = dsSet.Tables["orders"].Clone();
                        DataRow dr 
    = dt.NewRow();
                        
    for (int i = 0; i < dsSet.Tables["Orders"].Columns.Count; i++)
                        {
                            dr[i] 
    = drOrders[i];
                        }
                        
    //得到关联表的资料
                        dt.Rows.Add(dr);
                    }

                }
            }


    多表关联例子:

     


    using System.Data;
    using System.Data.SqlClient;

    namespace ManyRelations
    {
        
    class Program
        {
            
    static void Main(string[] args)
            {
                
    // Specify SQL Server-specific connection string

                SqlConnection thisConnection 
    = new SqlConnection(
                     
    @"Data Source=scott;Initial Catalog=northwind;Persist Security Info=True;User ID=sa;Password=sa123");

                DataSet thisDataSet 
    = new DataSet();
                SqlDataAdapter custAdapter 
    = new SqlDataAdapter(
                     
    "SELECT * FROM Customers", thisConnection);
                custAdapter.Fill(thisDataSet, 
    "Customers");

                SqlDataAdapter orderAdapter 
    = new SqlDataAdapter(
                     
    "SELECT * FROM Orders", thisConnection);
                orderAdapter.Fill(thisDataSet, 
    "Orders");

                SqlDataAdapter detailAdapter 
    = new SqlDataAdapter(
                     
    "SELECT * FROM [Order Details]", thisConnection);
                detailAdapter.Fill(thisDataSet, 
    "Order Details");

                SqlDataAdapter prodAdapter 
    = new SqlDataAdapter(
                     
    "SELECT * FROM Products", thisConnection);
                prodAdapter.Fill(thisDataSet, 
    "Products");

                DataRelation custOrderRel 
    = thisDataSet.Relations.Add("CustOrders",
                            thisDataSet.Tables[
    "Customers"].Columns["CustomerID"],
                            thisDataSet.Tables[
    "Orders"].Columns["CustomerID"]);

                DataRelation orderDetailRel 
    = thisDataSet.Relations.Add("OrderDetail",
                            thisDataSet.Tables[
    "Orders"].Columns["OrderID"],
                            thisDataSet.Tables[
    "Order Details"].Columns["OrderID"]);

                DataRelation orderProductRel 
    = thisDataSet.Relations.Add(
                  
    "OrderProducts", thisDataSet.Tables["Products"].Columns["ProductID"],
                   thisDataSet.Tables[
    "Order Details"].Columns["ProductID"]);

                
    foreach (DataRow custRow in thisDataSet.Tables["Customers"].Rows)
                {
                    Console.WriteLine(
    "Customer ID: " + custRow["CustomerID"]);

                    
    foreach (DataRow orderRow in custRow.GetChildRows(custOrderRel))
                    {
                        Console.WriteLine(
    "\tOrder ID: " + orderRow["OrderID"]);
                        Console.WriteLine(
    "\t\tOrder Date: " + orderRow["OrderDate"]);

                        
    foreach (DataRow detailRow in
                                 orderRow.GetChildRows(orderDetailRel))
                        {
                            Console.WriteLine(
    "\t\tProduct: " +
                            detailRow.GetParentRow(orderProductRel)[
    "ProductName"]);
                            Console.WriteLine(
    "\t\tQuantity: " + detailRow["Quantity"]);
                        }
                    }
                }
                thisConnection.Close();
                Console.Write(
    "Program finished, press Enter/Return to continue:");
                Console.ReadLine();
            }
        }
    }
  • 相关阅读:
    HBase 高性能加入数据
    Please do not register multiple Pages in undefined.js 小程序报错的几种解决方案
    小程序跳转时传多个参数及获取
    vue项目 调用百度地图 BMap is not defined
    vue生命周期小笔记
    解决小程序背景图片在真机上不能查看的问题
    vue项目 菜单侧边栏随着右侧内容盒子的高度实时变化
    vue项目 一行js代码搞定点击图片放大缩小
    微信小程序进行地图导航使用地图功能
    小程序报错Do not have xx handler in current page的解决方法
  • 原文地址:https://www.cnblogs.com/scottckt/p/1269631.html
Copyright © 2011-2022 走看看