非类型化的DataSet的构建及应用

        DataSet(数据集)就像一个数据库样,可以很方便的存入数据表,也可以很方便的修改.增加或删除并可以把修改后的数据传回相关的数据库.DataSet与数据库相比,可能无法存放那么多的数据,也可能不方便查询,但可以在脱机环境中很好的工作.
        跟DataSet一些使用的一般会涉及到的其它的类有,DataTable,DataColumn,DataRow,DataRelation等
            [1]DataTable:数据表,可以存放一张数据表
            [2]DataColumn:表示数据表中的一个列属性
            [3]DataRow:表示数据表中的一条数据记录
            [4]DataRelation:表示数据表之间的关系( 1:1,1:n,n:m)
            [5]ForeignKeyConstraint:外键约束
        下面以一个简单的测试程序来说明几个类对象之间的关系
        程序代码:
  1using System;
  2using System.Collections.Generic;
  3using System.Text;
  4using System.Data;
  5
  6namespace DataSetDemo
  7{
  8    /// <summary>
  9    /// 此程序主要是测试非类型化的DataSet及相关的操作等
 10    /// </summary>

 11    public class Program
 12    {
 13        static void Main(string[] args)
 14        {
 15            TestDataSet();
 16        }

 17
 18        /// <summary>
 19        ///测试DataSet,DataTable,DataRow,DataColumn,DataRelation等等
 20        /// </summary>

 21        public static void TestDataSet()
 22        {
 23            //创建一个数据集
 24            DataSet customerOrders = new DataSet("CustomerOrders");
 25            //创建三个数据表Customers ,Orders,Procucta
 26            DataTable customers = new DataTable("Customers");
 27            DataTable orders = new DataTable("Orders");
 28            DataTable products = new DataTable("Products");
 29
 30            //为Customers表添加列
 31            DataColumn myColumn = new DataColumn("CustID"typeof(System.Int32));
 32            customers.Columns.Add(myColumn);
 33            myColumn = new DataColumn("CustName"typeof(System.String));
 34            customers.Columns.Add(myColumn);
 35
 36            //为Products添加列
 37            myColumn = new DataColumn("ProdID"typeof(System.Int32));
 38            products.Columns.Add(myColumn);
 39            myColumn = new DataColumn("ProdName"typeof(System.String));
 40            products.Columns.Add(myColumn);
 41
 42            //为Orders表添加列
 43            myColumn = new DataColumn("OrderID"typeof(System.Int32));
 44            orders.Columns.Add(myColumn);
 45            myColumn = new DataColumn("CustID"typeof(System.Int32));
 46            orders.Columns.Add(myColumn);
 47            myColumn = new DataColumn("ProdID"typeof(System.Int32));
 48            orders.Columns.Add(myColumn);
 49
 50            //设置主键
 51            customers.PrimaryKey = new DataColumn[] { customers.Columns["CustID"] };
 52            products.PrimaryKey = new DataColumn[] { products.Columns["ProdID"] };
 53            orders.PrimaryKey = new DataColumn[] { orders.Columns["OrderID"] };
 54
 55            //设置外键约束
 56            ForeignKeyConstraint custOrderFK = new ForeignKeyConstraint("CustOrderFK",
 57                customers.Columns["CustID"], orders.Columns["CustID"]);
 58            custOrderFK.DeleteRule = Rule.Cascade;
 59            custOrderFK.UpdateRule = Rule.Cascade;
 60
 61            ForeignKeyConstraint prodOrderFk = new ForeignKeyConstraint("ProdOrderFK",
 62                products.Columns["ProdID"], orders.Columns["ProdID"]);
 63            prodOrderFk.DeleteRule = Rule.Cascade;
 64            prodOrderFk.UpdateRule = Rule.Cascade;
 65
 66            //添加外键约束
 67            orders.Constraints.Add(custOrderFK);
 68            orders.Constraints.Add(prodOrderFk);
 69
 70            //设置列属性自动增加
 71            DataColumn col = customers.Columns["CustID"];
 72            col.AutoIncrement = true;
 73            col.AutoIncrementSeed = 1;
 74            col.AutoIncrementStep = 1;
 75
 76            col = products.Columns["ProdID"];
 77            col.AutoIncrement = true;
 78            col.AutoIncrementSeed = 1;
 79            col.AutoIncrementStep = 1;
 80
 81            col = orders.Columns["OrderID"];
 82            col.AutoIncrement = true;
 83            col.AutoIncrementSeed = 1;
 84            col.AutoIncrementStep = 1;
 85
 86            //将三张表添加到数据集
 87            customerOrders.Tables.Add(customers);
 88            customerOrders.Tables.Add(products);
 89            customerOrders.Tables.Add(orders);
 90
 91            //为表添加关系
 92            DataRelation customersToOrders =
 93                new DataRelation("CustomerID", customers.Columns["CustID"], orders.Columns["CustID"]);
 94            customerOrders.Relations.Add(customersToOrders);
 95
 96            DataRelation productsToOrders =
 97                new DataRelation("ProductID", products.Columns["ProdID"], orders.Columns["CustID"]);
 98            customerOrders.Relations.Add(productsToOrders);
 99
100            //向表里添加记录
101            DataRow tempRow = customers.NewRow();
102            tempRow["CustName"= "Bills Feng";
103            customers.Rows.Add(tempRow);
104
105            tempRow = customers.NewRow();
106            tempRow["CustName"= "Diao You";
107            customers.Rows.Add(tempRow);
108
109            //table products
110            tempRow = products.NewRow();
111            tempRow["ProdName"= "iPhone";
112            products.Rows.Add(tempRow);
113
114            tempRow = products.NewRow();
115            tempRow["ProdName"= "iPod";
116            products.Rows.Add(tempRow);
117
118            //table orders
119            tempRow = orders.NewRow();
120            tempRow["CustID"= "1";
121            tempRow["ProdID"= "1";
122            orders.Rows.Add(tempRow);
123
124            tempRow = orders.NewRow();
125            tempRow["CustID"= "2";
126            tempRow["ProdID"= "2";
127            orders.Rows.Add(tempRow);
128
129            //以下了测试过程
130            //1.测试Custtomers表,GetChileRows
131            foreach (DataRow rowCustomer in customerOrders.Tables["Customers"].Rows)
132            {
133                Console.WriteLine(rowCustomer["CustID"+ "-" +
134                    rowCustomer["CustName"]);
135                foreach (DataRow rowOrder in rowCustomer.GetChildRows("CustomerID"))
136                {
137                    Console.WriteLine("\t" +"ChildRow:"+ rowOrder["OrderID"+ "-" +
138                        rowOrder["CustID"]);
139                }

140                Console.WriteLine(".");
141
142            }

143
144            //2.测试Orders表, 测试GetParentrows
145            DataRow rowParent;
146            foreach (DataRow rowOrder in customerOrders.Tables["Orders"].Rows)
147            {
148                Console.WriteLine(rowOrder["OrderID"+ "\t" + rowOrder["CustID"]+"\t"+rowOrder["ProdID"]);
149                //定位相关的父行
150                rowParent = rowOrder.GetParentRow("CustomerID");
151                Console.WriteLine("\t" +"ParentRow:"+ rowParent["CustName"]);
152                rowParent = rowOrder.GetParentRow("ProductID");
153                Console.WriteLine("\t" + "ParentRow:" + rowParent["ProdName"]);
154                Console.WriteLine(".");
155            }

156
157        }

158    }

159}

160
posted on 2008-07-18 18:49  bills.feng  阅读(650)  评论(0编辑  收藏  举报