技术开发 频道

Duwamish 7.0学习笔记

通用层

  映射关系数据库表到实际应用的类(对象)层。相当于是一个面向对象的数据库层,把物理的数据库表的字段映射成业务对象:
 
  ·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]的参数值。

0
相关文章