简介作为web 开发人员,我们的工作总是在和数据打交道。
我们创建数据库来存储数据,编写代码来检索并修改数据,并创建Web 页面来收集和汇总数据。
这是探讨在 2.0 中实现这些常用类型的技巧的系列教程中的首篇教程。
我们从创建一个软件架构开始,包括使用Typed DataSet 的数据访问层(DAL) 、实现自定义业务规则的业务逻辑层(BLL) 和共享同一页面布局的 页面组成的表示层。
一旦奠定了这个基础,我们接下来会转向报表,说明如何显示、汇总、收集和验证来自Web 应用程序的数据。
这些教程力求简明,使用大量屏幕截图逐步教您直观地了解整个流程。
每个教程都提供C# 和Visual Basic 版本,并且可以下载所使用的全部代码。
(这篇教程内容非常冗长,但接下来会分几大部分进行介绍,使人更容易理解和消化。
)针对这些教程,我们将使用放在App_Data目录下Northwind 数据库的Microsoft SQL Server 2005 Express Edition版本。
除数据库文件外,App_Data文件夹也包含创建该数据库的SQL 脚本,以满足您想使用不同数据库版本的需求。
如果愿意,这些脚本也可以直接从Microsoft 下载。
如果您使用的是Northwind 数据库的不同SQL Server 版本,需要更新该应用程序的Web.config文件中的NORTHWNDConnectionString设置。
这个Web 应用程序是使用Visual Studio 2005 Professional Edition 创建的基于文件系统的Web 站点项目。
不过,所有的这些教程同样适用于Visual Studio 2005 免费版,即Visual Web Developer。
该教程从头开始,先创建数据访问层(DAL) ,然后在第二篇教程中创建业务逻辑层(BLL) ,并在第三篇教程中进行页面布局和导航。
随后的教程以前三篇教程为基础。
在这篇教程中我们有很多内容要学习,现在就让我们打开Visual Studio 开始吧!步骤1 :创建一个Web 项目并连接到数据库在创建我们的数据访问层(DAL) 之前,我们首先需要创建一个网站并安装我们的数据库。
开始创建一个新的基于文件系统的 网站:从File 菜单选择New Web Site ,出现New Web Site 对话框。
选择 Web Site 模板,将Location 下拉列表设置成File System ,然后为该网站选择一个文件夹,并将语言设置成C# 。
图1 :创建一个基于文件系统的新网站这将创建一个具有Default.aspx 页面和App_Data文件夹的新网站。
创建好了网站,下一步是在Visual Studio 的Server Explorer 中添加对该数据库的引用。
通过在Server Explorer 中添加数据库,您可以添加来自Visual Studio 的表、存储过程、视图等。
您还可以手动或通过Query Builder 直观地查看表数据或进行查询。
而且,当我们为DAL 创建Typed DataSet 时,我们需要将Visual Studio 指向需要建立Typed DataSet 的数据库。
当我们能够及时在那个点上提供这种连接信息时,Visual Studio 自动填充己在Server Explorer 注册过的数据库的下拉列表。
将Northwind 数据库添加到Server Explorer 的步骤取决于您是否使用App_Data文件夹中的SQL Server 2005 Express Edition 数据库,或者是否有您想使用的Microsoft SQL Server 2000 或2005 数据库服务器安装程序。
使用 App_Data文件夹中的数据库如果您没有SQL Server 2000 或2005 数据库服务器可连接,或者您只想避免将该数据库添加到数据库服务器的麻烦,可以使用位于已下载网站源代码的App_Data文件夹中的Northwind 数据库的SQL Server 2005 Express Edition 版本(NORTHWND.MDF) 。
位于App_Data文件夹中的数据库将被自动添加到Server Explorer 。
假如您安装了SQL Server 2005 Express Edition ,在Server Explorer 应该看到一个名为NORTHWND.MDF 的节点,可以展开并探究其表、视图、存储过程等(见图2 )。
App_Data文件夹也可以存放Microsoft Access .mdb文件。
同它们的SQL Server 版本的数据库一样,这类文件将被自动添加到Server Explorer 。
如果您不想使用任何SQL Server 的数据库,您可以下载Northwind 数据库文件的Microsoft Access 版本并加入App_Data目录。
不过要记住,Access 数据库的特性不如SQL Server 丰富,且并不是为在网站环境下使用而设计的。
另外,35 以后的教程将用到某些不被Access 支持的数据库级特性。
连接到Microsoft SQL Server 2000 或2005 数据库服务器中的数据库同样,您可能要连接到安装在数据库服务器上的Northwind 数据库。
如果数据库服务器还没有安装Northwind 数据库,您必须先运行该教程下载文件中的安装脚本或直接从Microsoft 网站下载Northwind 的SQL Server 2000 版本和安装脚本,将其添加到数据库服务器。
一旦安装了该数据库,转到Visual Studio 的Server Explorer ,右键单击Data Connections 节点并选择Add Connection 。
如果没有找到Server Explorer ,转入View / Server Explorer 或选择Ctrl+Alt+S 。
这时将出现Add Connection 对话框,在这里可以指定要连接的服务器,认证信息和数据库名称。
一旦成功配置了数据库连接信息,单击OK 按钮,该数据库将被作为一个节点添加到Data Connections 节点下面。
您可以展开该数据库节点以探究其表、视图、存储过程等。
图2 :在您的数据库服务器的Northwind 数据库添加一个连接步骤2 :创建数据访问层在处理数据时,有种做法是将数据的特定逻辑直接内嵌到表示层(Web 应用程序中, 页面组成表示层)。
这可以通过在 页面的代码部分编写 代码,或者在标记符部分使用SqlDataSource 控件来完成。
无论采取哪种形式,该方法都让数据访问逻辑与表示层紧密结合。
不过,建议将数据访问与表示层隔离开来。
这个分离层被称作数据访问层(DAL) ,通常作为一个单独的类库项目来实现。
这种分层体系结构的优势得到了很好的论述,我们在该系列教程中也采用了此法。
有关基础数据源的所有代码,如创建到数据库的连接,发出SELECT 、INSERT 、UPDATE和DELETE命令等,都应位于DAL 。
表示层不应包含对这些数据访问代码的任何引用,而是通过调用DAL 来实现所有的数据访问请求。
数据访问层通常包含访问基础数据库数据的方法。
例如,Northwind 数据库提供Products和Categories表,记录要销售的产品及其他们所属的类别。
我们的DAL 提供如下方法:∙GetCategories():返回所有类别的信息∙GetProducts():返回所有产品的信息∙GetProductsByCategoryID(categoryID):返回属于某一指定类别的所有产品∙GetProductByProductID(productID):返回某一产品的信息调用时,这些方法将连接到数据库,进行适当的查询,并返回查询结果。
重要的是返回这些结果的方式。
这些方法可以简单返回一个由数据库查询填充的DataSet 或DataReader ,但理想的是应使用强类型的对象来返回这些结果。
强类型对象指的是编译时对其schema 进行严格定义的对象。
相反,弱类型的对象指的是只有在运行时才知道其schema 的对象。
例如,DataReader 和DataSet (默认)是弱类型对象,因为它们的schema 是由用来填充它们的数据库查询返回的列来定义的。
要访问弱类型DataTable 中的某列,需要使用如下语法:DataTable.Rows[index]["columnName"]。
我们需要使用字符串或序号索引访问列名这一点就显示了该例中DataTable 的弱类型特性。
另一方面,强类型的DataTable 有各自作为属性实现的列,生成如下代码:DataTable.Rows[index].columnName。
要返回强类型对象,开发人员可以创建他们自己的自定义业务对象或使用Typed DataSet 。
一个业务对象由开发人员实现成一个类,该类的属性通常反映出该业务对象表示的基础数据库表的列。
Typed DataSet 是由Visual Studio 基于数据库schema 为您生成的一个类,其成员都是强类型的。
Typed DataSet 本身包括了拓展 DataSet 、DataTable 和DataRow 类的类。
除强类型DataTable 外,Typed DataSet 现在还包括TableAdapter ,该类具有填充DataSet 的DataTable 以及将DataTable 中所作修改传回数据库的方法。
注意:有关使用Typed DataSet 与自定义业务对象的优劣比较的更多信息,请参见设计数据层组件并在层间传递数据。
我们对这些教程的体系结构使用强类型的DataSet 。
图 3 说明了使用Typed DataSet 的应用程序不同层间的工作流程。
图3 :所有的数据访问代码都在DAL 中定义创建一个Typed DataSet 和Table Adapter要创建我们的DAL ,要先将一个Typed DataSet 添加到我们的项目。
为此,右键单击Solution Explorer 中的项目节点,并选择Add a New Item 。
从模板列表中选择DataSet 选项,并将其命名为Northwind.xsd。
图4 :选择添加一个新的DataSet 到您的项目单击Add 后,出现提示添加DataSet 到App_Code文件夹,选择Yes 。
接着出现Typed DataSet 设计器并将启动TableAdapter Configuration Wizard ,允许您将您的第一个TableAdapter 添加到Typed DataSet 。