DataSet(数据集)就像一个数据库样,可以很方便的存入数据表,也可以很方便的修改.增加或删除并可以把修改后的数据传回相关的数据库.DataSet与数据库相比,可能无法存放那么多的数据,也可能不方便查询,但可以在脱机环境中很好的工作.
跟DataSet一些使用的一般会涉及到的其它的类有,DataTable,DataColumn,DataRow,DataRelation等
[1]DataTable:数据表,可以存放一张数据表
[2]DataColumn:表示数据表中的一个列属性
[3]DataRow:表示数据表中的一条数据记录
[4]DataRelation:表示数据表之间的关系( 1:1,1:n,n:m)
[5]
ForeignKeyConstraint:外键约束
下面以一个简单的测试程序来说明几个类对象之间的关系
程序代码:
1
using System;
2
using System.Collections.Generic;
3
using System.Text;
4
using System.Data;
5
6
namespace 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 @ 2008-07-18 18:49
bills.feng 阅读(80)
评论(0) 编辑 收藏