学习.net 2.0 Personal Web Site Starter Kit (1) - 数据库
.net 2.0 用的是Sql Server 2005 Express. Sql Server 2005 Express是一个免费的嵌入式数据库。令我比较亮眼的一点,是 Sql Server 2005 也是架构于 CLR 之上所以和其他的编程语言都能很好的结合。存储过程,触发器等等都可以是C#写的。
App_Data目录存放项目的数据内容。例子提供了一个personal-add.sql.我们可以很清楚地看到创建了2个数据库表 album 和 photos 。数据库很简单。只是在 photos 里面存储了4张不同大小的图片。不知道真正的图片网站会不会做这样的储备——用空间代替时间。sql文件接下来就是所有的存储过程,添加,删除、修改和获得。用存储过程来进行数据库操作可以有效地提高运行速度。
存储过程的好处在于 1 已在服务器注册。2 具有安全特性(例如权限)和所有权链接,以及可以附加到它们的证书。3 可以强制应用程序的安全性。4 允许模块化程序设计。5 是命名代码,允许延迟绑定。 6 可以减少网络通信流量。
还有一个内建的强大数据库是ASPNETDB.作为2005很有用的控件完成了用户注册,登陆,角色分配等功能. ASPNETDB 有11个数据库表,9个视图,以及很多存储过程。有些视图,比如说 vw_aspnet_Applications 只是把单一的表 aspnet_Applications 选择出来。这样做有什么好处呢?
视图的作用类似于筛选,分布式查询也可用于定义使用多个异类源数据的视图。您可以创建标准视图、索引视图和分区视图。视图通常用来集中、简化和自定义每个用户对数据库的不同认识。视图可用作安全机制,方法是允许用户通过视图访问数据,而不授予用户直接访问视图基础表的权限。视图可用于提供向后兼容接口来模拟曾经存在但其架构已更改的表。还可以在向 Microsoft SQL Server 2005 复制数据和从其中复制数据时使用视图,以便提高性能并对数据进行分区。
App_Code目录存放了对数据库操作的类和方法。其中Album.cs和photo.cs定义了album和photo的结构。不过用的是 public class...而不是public struct?!photosize 是一个enum。C#的enum支持System.FlagsAtrribute.不记得原来 C++ 支持这个。位操作在作为 Flag 的时候还是作用蛮大的。 PhotoManager 的类把所有数据库相关操作都封装起来了.其中有一个 ResizeImageFile 的私有函数,可以看出 .net 的 Image 功能强大。
structs 与类不同的是,它们不能是抽象的,并且不支持实现继承。与类的重要区别在于,structs 是值类型,而类是引用类型。对于 structs 编译器始终提供一个默认的无参数构造函数,它是不允许替换的。