通用层
映射关系数据库表到实际应用的类(对象)层。相当于是一个面向对象的数据库层,把物理的数据库表的字段映射成业务对象:
·BookData.cs:BookData类继承自dataset类,创建了一个datatable表,用于存储书的数据。支持序列化。
·CategoryData.cs:CategoryData类继承自dataset类,创建了一个datatable表,用于存储书分类的数据。支持序列化。
·CustomerData.cs:CustomerData类继承自dataset类,创建了一个datatable表,用于存储书的数据。支持序列化。
·OrderData.cs:OrderData类也继承自dataset类,但它包含了五个表,各个表字段不一样。
编程技巧学习
1.存储过程技巧
1)字符串字段的累加的方法
我们看看GetBookById存储过程的一段源码:
PROCEDURE GetBookById
@BookId INT
AS
-- max size = 10 Authors
DECLARE @AuthorList nvarchar(480)
SET NOCOUNT ON
-- initialize @AuthorList
SELECT @AuthorList = ""
-- build list of authors
SELECT @AuthorList = @AuthorList + a.Name + ", "
FROM Books b,
BookAuthor ba,
Authors a
WHERE b.ItemId = @BookId
AND ba.ItemId = b.ItemId
AND a.PKId = ba.AuthorId
-- remove last comma
SELECT @AuthorList = LEFT(@AuthorList,LEN(@AuthorList) - 1)
把这段单独拷出来,在查询分析器运行,我们发现这段是用来取某本书的作者的列表,一本书可能有多个作者。
SELECT @AuthorList = @AuthorList + a.Name + ", "
FROM Books b,
BookAuthor ba,
Authors a
WHERE b.ItemId = @BookId
AND ba.ItemId = b.ItemId
AND a.PKId = ba.AuthorId
就是把书的作者名一个个取出来,累加到@AuthorList变量中,各个作者用逗号隔开,最后一句SELECT @AuthorList = LEFT(@AuthorList,LEN(@AuthorList) - 1)把最后一个作者后的逗号去掉。
2)存储过程参数与dataset中字段的映射
在Customers类中的GetInsertCommand方法中,我们看到了下面的代码:
sqlParams[PKID_PARM].SourceColumn = CustomerData.PKID_FIELD;
sqlParams[PKID_PARM].Direction = ParameterDirection.Output;
sqlParams[EMAIL_PARM].SourceColumn = CustomerData.EMAIL_FIELD;
它运用了sqlparameter对象的SourceColumn属性,该属性用于指定sqlparameter对象的值与dataset中字段的映射。它是双向,即是输入值,也是输出值。sqlParams[EMAIL_PARM].SourceColumn = CustomerData.EMAIL_FIELD;这一句表示把CustomerData(dataset对象)的EMAIL_FIELD字段值映射成sqlParams[EMAIL_PARM]的参数值。