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

6
namespace DataSetDemo7
{8
/// <summary>9
/// 此程序主要是测试非类型化的DataSet及相关的操作等10
/// </summary>11
public class Program12
{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,Procucta26
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 products110
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 orders119
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表,GetChileRows131
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表, 测试GetParentrows145
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


浙公网安备 33010602011771号