今天我们来看一下论坛操作数据库的一个整体流程,我们先以注册用户为例
首先,我们通过页面找到注册的页面 User/CreateUser.aspx ,其中使用了<Forums:CreateUser id="CreateUser1" runat="server" />控件
然后,我们在Controls的项目中找 User/CreateUser.cs 文件,
通过 string skinFilename = "Skin-CreateNewAccount.ascx" 可以看出这个控件的界面是通过加载Skin-CreateNewAccount.ascx这个用户控件来
生成的。
接着在 User/CreateUser.cs 文件中定义了 控件类,使用来存放页面中的控件。
在该类的InitializeSkin方法中就是将用户控件中的控件取出来赋刚刚定义的控件类,同时,附加按钮的点击事件。
 
接着,处理按钮的点击事件 CreateUser_Click,在这个方法中,现将页面中的控件的值赋给 user 对象的各个属性
其中也有些根据用户注册方面的一个配置来赋值。
 
接着,调用 Users 类的 Users.Create(user, true) ,在这个方面验证注册的用户名是否正确,并对密码根据配置方式来加密,
其中最后调用 dp.CreateUpdateDeleteUser(user, DataProviderAction.Create, out status),其中dp是ForumsDataProvider的
一个实例,但是ForumsDataProvider是一个抽象类,那么,这个dp到底真正是哪个类的实例呢?应该是一个类继承了ForumsDataProvider。
 
在 Users 类中 在生成 dp的时候代码如下:
ForumsDataProvider dp = ForumsDataProvider.Instance();
我们接着看ForumsDataProvider.Instance()方法,这个方法会根据Web.Conig中forums/forums/providers中定义好的类型来实例化该类,
在这个系统中,这里定义的是AspNetForums.Data.SqlDataProvider,我们到AspNetForums.SqlDataProvider项目中看该类确实是继承自ForumsDataProvider,
 
最后,就是很普通的通过存储过程来更新数据。
 
他为什么这样做,其实是有灵活性的,这样可以通过配置文件来配置我的数据访问类是哪个,这样我们可以写适合其它数据库的类,这样该系统就
可以兼容多数据库系统了。