实体层可以有多种选择,今天我谈谈用.Net 的CollectionBase 类建立实体层。
源码
.Net中可绑定的对象必须实现 ICollection, IEnumerable接口,CollectionBase则是很好的选择,查看它的定义可知其实现了上述两接口。
1.建立一个与Products表对应的类Product(为了适应多数读者,仍用.Net2的风格,.Net3.5会更简洁):
源码
.Net中可绑定的对象必须实现 ICollection, IEnumerable接口,CollectionBase则是很好的选择,查看它的定义可知其实现了上述两接口。
1.建立一个与Products表对应的类Product(为了适应多数读者,仍用.Net2的风格,.Net3.5会更简洁):
1
namespace CollBase
2
{
3
[Serializable]
4
public class Product
5
{
6
private int _productId;
7
private string _productName;
8
private int _supplierId;
9
private int _categoryId;
10
private string _quantityPerUnit;
11
private float _unitPrice;
12
private int _unitsInStock;
13
private int _unitsOnOrder;
14
private int _reorderLevel;
15
private byte _discontinued;
16
17
[XmlAttribute]
18
public int ProductId
19
{
20
get { return _productId; }
21
set { _productId = value; }
22
}
23
24
[XmlAttribute]
25
public string ProductName
26
{
27
get { return _productName; }
28
set { _productName = value; }
29
}
30
31
[XmlAttribute]
32
public int SupplierId
33
{
34
get { return _supplierId; }
35
set { _supplierId = value; }
36
}
37
38
[XmlAttribute]
39
public int CategoryId
40
{
41
get { return _categoryId; }
42
set { _categoryId = value; }
43
}
44
45
[XmlAttribute]
46
public string QuantityPerUnit
47
{
48
get { return _quantityPerUnit; }
49
set { _quantityPerUnit = value; }
50
}
51
52
[XmlAttribute]
53
public float UnitPrice
54
{
55
get { return _unitPrice; }
56
set { _unitPrice = value; }
57
}
58
59
[XmlAttribute]
60
public int UnitInStock
61
{
62
get { return _unitsInStock; }
63
set { _unitsInStock = value; }
64
}
65
66
[XmlAttribute]
67
public int UnitsOnOrder
68
{
69
get { return _unitsOnOrder; }
70
set { _unitsOnOrder = value; }
71
}
72
73
[XmlAttribute]
74
public int ReorderLevel
75
{
76
get { return _reorderLevel; }
77
set { _reorderLevel = value; }
78
}
79
80
[XmlAttribute]
81
public byte Discontinued
82
{
83
get { return _discontinued; }
84
set { _discontinued = value; }
85
}
86
87
}
88
}
2.建立Product的集合类ProductCollection,此类继承自CollectionBase类:
3.建立存储过程GetAllProduct,以XML格式返回Product表中全部记录:
Create PROCEDURE [dbo].[GetAllProduct]

AS
BEGIN
SET NOCOUNT ON;
select
productid as '@ProductId',
productName as '@ProductName',
supplierid as '@SupplierId',
categoryid as '@CategoryId',
quantityperunit as '@QuantityPerUnit',
unitprice as '@UnitPrice',
unitsinstock as '@UnitInStock',
unitsonorder as '@UnitsOnOrder',
reorderlevel as '@ReorderLevel',
discontinued as '@Discontinued'
from products
for xml path('Product'),root('ArrayOfProduct')
END
4.绑定数据
扩展:
1.本实例比较简单,我并没有作出分层,有兴趣的朋友可以自己试试。
2.对于实体类可以自己写个工具生成,而不必手写。
3.对于效率问题和Dataset,Linq相比,本人不敢妄言
,此方法给大家多提供一种选择。
此例涉及到CollectionBase 的序列化和反序列化(CollectionBase的序列化有点特别)。写的比较仓促,有不明白之处回帖,我会尽快回复。如有不妥之处也请指教。
namespace CollBase2
{3
[Serializable]4
public class Product5
{6
private int _productId;7
private string _productName;8
private int _supplierId;9
private int _categoryId;10
private string _quantityPerUnit;11
private float _unitPrice;12
private int _unitsInStock;13
private int _unitsOnOrder;14
private int _reorderLevel;15
private byte _discontinued;16

17
[XmlAttribute]18
public int ProductId19
{20
get { return _productId; }21
set { _productId = value; }22
}23

24
[XmlAttribute]25
public string ProductName26
{27
get { return _productName; }28
set { _productName = value; }29
}30

31
[XmlAttribute]32
public int SupplierId33
{34
get { return _supplierId; }35
set { _supplierId = value; }36
}37

38
[XmlAttribute]39
public int CategoryId40
{41
get { return _categoryId; }42
set { _categoryId = value; }43
}44

45
[XmlAttribute]46
public string QuantityPerUnit47
{48
get { return _quantityPerUnit; }49
set { _quantityPerUnit = value; }50
}51

52
[XmlAttribute]53
public float UnitPrice54
{55
get { return _unitPrice; }56
set { _unitPrice = value; }57
}58

59
[XmlAttribute]60
public int UnitInStock61
{62
get { return _unitsInStock; }63
set { _unitsInStock = value; }64
}65

66
[XmlAttribute]67
public int UnitsOnOrder68
{69
get { return _unitsOnOrder; }70
set { _unitsOnOrder = value; }71
}72

73
[XmlAttribute]74
public int ReorderLevel75
{76
get { return _reorderLevel; }77
set { _reorderLevel = value; }78
}79

80
[XmlAttribute]81
public byte Discontinued82
{83
get { return _discontinued; }84
set { _discontinued = value; }85
}86

87
}88
}2.建立Product的集合类ProductCollection,此类继承自CollectionBase类:
1
namespace CollBase
2
{
3
[Serializable]
4
public class ProductCollection:CollectionBase
5
{
6
public Product this[int index]
7
{
8
get { return ((Product)List[index]); }
9
set { List[index] = value; }
10
}
11
12
public int Add(Product product)
13
{
14
return (List.Add(product));
15
}
16
17
public int IndexOf(Product product)
18
{
19
return (List.IndexOf(product));
20
}
21
22
}
23
}
namespace CollBase2
{3
[Serializable]4
public class ProductCollection:CollectionBase5
{6
public Product this[int index]7
{8
get { return ((Product)List[index]); }9
set { List[index] = value; }10
}11

12
public int Add(Product product)13
{14
return (List.Add(product));15
}16

17
public int IndexOf(Product product)18
{19
return (List.IndexOf(product));20
}21

22
}23
}3.建立存储过程GetAllProduct,以XML格式返回Product表中全部记录:
Create PROCEDURE [dbo].[GetAllProduct]
AS
BEGIN
SET NOCOUNT ON;
select
productid as '@ProductId',
productName as '@ProductName',
supplierid as '@SupplierId',
categoryid as '@CategoryId',
quantityperunit as '@QuantityPerUnit',
unitprice as '@UnitPrice',
unitsinstock as '@UnitInStock',
unitsonorder as '@UnitsOnOrder',
reorderlevel as '@ReorderLevel',
discontinued as '@Discontinued'
from products
for xml path('Product'),root('ArrayOfProduct')
END4.绑定数据
1
private void BindGrid()
2
{
3
ProductCollection products = new ProductCollection();
4
SqlDatabase db = new SqlDatabase(ConfigurationManager.ConnectionStrings["MySqlConnection"].ConnectionString);
5
DbCommand command = db.GetStoredProcCommand("GetAllProduct");
6
XmlReader reader = db.ExecuteXmlReader(command);
7
XmlSerializer serializer = new XmlSerializer(typeof(ProductCollection));
8
products = (ProductCollection)serializer.Deserialize(reader);
9
10
gridProduct.DataSource = products;
11
gridProduct.DataBind();
12
13
}
private void BindGrid()2
{3
ProductCollection products = new ProductCollection();4
SqlDatabase db = new SqlDatabase(ConfigurationManager.ConnectionStrings["MySqlConnection"].ConnectionString);5
DbCommand command = db.GetStoredProcCommand("GetAllProduct");6
XmlReader reader = db.ExecuteXmlReader(command); 7
XmlSerializer serializer = new XmlSerializer(typeof(ProductCollection));8
products = (ProductCollection)serializer.Deserialize(reader);9

10
gridProduct.DataSource = products;11
gridProduct.DataBind();12

13
}扩展:
1.本实例比较简单,我并没有作出分层,有兴趣的朋友可以自己试试。
2.对于实体类可以自己写个工具生成,而不必手写。
3.对于效率问题和Dataset,Linq相比,本人不敢妄言
,此方法给大家多提供一种选择。此例涉及到CollectionBase 的序列化和反序列化(CollectionBase的序列化有点特别)。写的比较仓促,有不明白之处回帖,我会尽快回复。如有不妥之处也请指教。



浙公网安备 33010602011771号