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();
            }
        }
    }
  • 相关阅读:
    Spring深入浅出(九),注解,@Autowired/@Resource,及其它(@Component/@Repository/@Service/@Controller)
    Spring深入浅出(八),自动装配,constructor
    使用node-webkit包装浏览器
    node-webkit 屏幕截图功能
    nodeJS 爬虫,通过Puppeteer实现滚动加载
    nodejs爬虫笔记(四)---利用nightmare解决加载更多问题
    一款开源免费的WPF图表控件ModernuiCharts
    使用各种 WPF Chart图表控件、插件的经历回顾与总结
    android 控件转bitmap
    一些关于 SAP Spartacus 组件和模块延迟加载的问题和解答
  • 原文地址:https://www.cnblogs.com/scottckt/p/1269631.html
Copyright © 2011-2022 走看看