asp.net

位置:IT落伍者 >> asp.net >> 浏览文章

<asp:Parameter>

基本的参数占位符可稍后定义

<asp:ControlParameter>

在获取页面上另一个服务器控件的值时使用

<asp:CookieParameter>

在需要获取最终用户的 cookie 键值时使用

<asp:FormParameter>

在接收来自窗体集合的值时使用

<asp:ProfileParameter>

在接收来自 Profile 对象的值时使用该对象与提交请求的最终用户相关联

<asp:QueryStringParameter>

在接收请求的 URL 查询字符串的键值时使用

<asp:SessionParameter>

在接收最终用户会话对象的键值时使用

我们通过使用 <asp:ControlParameter> 控件将列表 示例中的 @MediaType 值与 DropDownList 服务器控件中的值关联起来

要从页面上的 DropDownList 控件获取 @MediaType 所使用的值ControlParameter 控件需要通过属性 ControlID 将两者关联起来提供给 ControlID 属性的值必须为关联控件的 ID 属性值后面的属性 Name 指向参数化查询中的真正变量名这一点很重要因为需要定义的 Select 参数可能不止一个虽然本示例仅有一个参数但是这种关联仍然是必要的因为我们使用的是一个下拉列表所以需要定义 SqlDataSource 控件要使用下拉列表的哪一个属性例如在关联一个下拉列表控件时可以获得诸如 SelectedIndexSelectedItemSelectedValue 属性的值因此需要声明要获取的属性SqlDataSource 控件中定义的最后一个属性是 Type 属性就是在这里对控件的值进行真正意义上的类型转换(本示例转换为 Int

上述定义完成后您就可以使用下拉列表控件来驱动 SqlDataSource 控件并使用通过它提取的 Librarymdf 数据库文件中 Media 表的值了

以编程方式定义参数

除了声明方式之外还有另一种选择下面介绍以编程方式定义参数如上文所示与直接在 SqlDataSource 控件中使用不同这种方式在代码隐藏页面中使用

观察 Defaultaspx 页它位于 Media Share Library Starter Kit 的 Library 文件夹该页会在您所有的或借用的项目上显示警告这些警告还会提供给参数化 select 查询过程所使用的 SqlDataSource 控件Select 命令如下所示

SELECT [UserName] [MediaName] [MediaISBN] [DueDate] FROM [Media]

WHERE (([DueDate] < @DueDate) AND ([Borrower] = @Borrower) AND ([OnLoan] = @OnLoan)) ORDER BY [DueDate]

在完成这个 Select 命令之前必须为三个变量赋值 — @DueDate@Borrower@OnLoan如果查看 Defaultaspx 页中的 SqlDataSource 控件声明您会发现这三个变量之中只有两个在 Select 命令中赋了值

上面定义的声明参数列表只声明了 @Borrower@OnLoan 参数列表中没有 @DueDate 参数这是因为该参数值会随服务器当前日期/时间的变化而动态改变这也是该参数需要以声明方式定义的原因

    SqlDataSourceSelectParametersAdd(DueDate

    TypeCodeDateTimeDateTimeNowToString())

在该行代码中SqlDataSource 控件通过 Add() 方法添加一个 SelectParameter

Add() 方法要求提供变量名类型和值即本例中的 DueDate对于该变量的值我们只需提供服务器当前日期/时间即可

到此为止SqlDataSource 控件已经具备 Select 命令需要的所有三个参数

尽管本文说明的是 Select 命令的使用但是不要忘了您还可以将此类功能用于 DeleteInsert 和 Update 命令

小结

本文为您介绍了ASPNET构建数据层首先我们介绍了在 SQL Server Express Edition 中如何直接构建一个新的数据库和表然后介绍了 ASPNET 数据源控件以及如何使用这些控件从创建的数据文件中提取所需的数据ASPNET Jumpstart将介绍如何使用 ASPNET 提供的一些激动人心的新控件希望您能享受其中的乐趣并祝您编程愉快!

               

ASP.NET构建数据层学习笔记


发布日期:2022年04月08日
 
ASP.NET构建数据层学习笔记

ASPNET构建数据层适用于

Microsoft ASPNET

Microsoft Visual Web Developer Express Edition

欢迎您阅读ASPNET构建数据层该文章将为您从头到尾展示创建一个应用程序的完整过程要构建的初学者工具包称为 Media Share Library Starter KitMedia Share Library Starter Kit 使您能轻松创建允许注册用户展示媒体项目(例如电影 DVD音乐 CD书籍等等)集合的应用程序以便供其他注册用户借用用户能够一并浏览使用该应用程序的组所拥有的项目库并向项目的注册所有者请求借用某些特定项目Media Share Library Starter Kit 的理念是您能够使用其提供的框架快速组织为更多人所共享的库集合

无论您是否使用初学者工具包它本身就表明了在最新版本的 ASPNET 中 Microsoft ASPNET 所具备的更激动人心的附加功能这正是它的微妙所在初学者工具包利用了大量的母版页新的代码隐藏模型新的服务器控件等等本文重点介绍如何使用初学者工具包的一些激动人心的新的数据功能例如使用新的 Microsoft SQL Server Express Edition 文件以及新数据源控件来执行插入更新和删除数据的操作这些功能将在 ASPNET 中提供

让我们开始自己动手构建初学者工具包的数据层吧首先来学习使用新的 SQL Server Express Edition 构建自己的数据存储

使用SQL Server Express

Microsoft 的 SQL Server Express Edition 是一个新的数据库产品它基于 Microsoft SQL Server 成熟版本所使用的技术SQL Server Express Edition 是 SQL Server 的一个剪裁版本只要使用它您就不必使用其他数据库文件(例如 Microsoft Access mdb 文件)来构建 ASPNET 应用程序的数据层了

过去许多 Web 开发人员和业余爱好者发现使用 Access 文件作为应用程序的数据存储非常简单这些文件不但易于安装和实现而且易于和应用程序的其余文件一起从一个位置复制到另一个位置鑒于这个原因Microsoft 通过新的 mdf 文件扩展名提供了 SQL Server Express Edition 文件您能够以处理上述 Access 文件的方式对它进行处理这些 mdf 文件可通过与 Visual Studio 集成的卓越功能轻松创建在 ASPNET 应用程序内使用起来很简单通过 xcopy 将文件从一个位置复制到另一个位置也很容易就好像只是 ASPNET 应用程序中的另一些文件一样通过它进行部署可以说是易如反掌

不仅如此使用方面的便利还有很多新的 SQL Server Express 产品支持诸如 XMLVARCHAR(MAX) 等新的数据类型甚至支持用户定义的数据类型

首先我们来了解用于存储用户和角色信息的数据库文件

构建ASPNETDBMDF 文件

本文介绍的初学者工具包是处理注册用户的因此您最想知道的可能就是初学者工具包存储用户和角色信息的位置在初次构建和运行应用程序时您会注意到Visual Studio 动态创建了存储这些信息的数据库文件

按 F 键启动并构建应用程序之后ASPNET 将动态创建所需的 ASPNETDBMDF 数据库文件该文件用于为应用程序存储用户的登录信息和角色信息

在 App_Data 文件夹中除了 ASPNETDBMDF 文件还有 Librarymdf 文件我们将在后面简要介绍此文件如果文件夹中没有此文件需要按下 Visual Studio 解决方案资源管理器工具栏中的刷新按钮使用 Visual Studio 的优点是可直接通过它对此文件以及其他 SQL Server Express 数据库文件执行您所需的任何操作在解决方案资源管理器中双击 ASPNETDBMDF 文件在 Visual Studio Server Explorer 中打开该数据库文件

您不仅可以使用数据库中包含的表还可以使用数据库图表视图存储过程函数同义词类型和程序集该 ASPNETDBMDF 文件屏幕快照显示使用用户登录信息和角色时所需的所有表以及与用户关联的配置文件信息

我们将不修改该 ASPNETDBMDF 文件因为它是要运行的 ASPNET 引擎需要的一个文件可以在该数据库文件中只添加所需的新表并仅从该数据库文件处运行整个应用程序但是最佳做法是将您自定义的数据库操作从默认的 ASPNETDBMDF 文件所执行的操作中分离出来那么

接下来我们将介绍如何创建 Librarymdf 数据库文件媒体共享库 (Media Share Library) 将使用该文件来存储有关应用程序所保存项目的所有信息其中包括每个保存的项目是否处于借用状态

构建 Librarymdf 文件

构建下一层媒体共享库 (Media Share Library) 数据层的方法是构建一个简单的数据库文件用它来保存应用程序需要存储的所有底层数据该数据库中实际存储的是什么?嗯事实上用户需要存储自己的媒体库(DVDCD书籍等)以及有关项目借用状态的信息如果您看过第一篇介绍初学者工具包的 ASPNET Jumpstart 文章就不难理解这个问题了

要创建所需的数据库文件在 Visual Studio 解决方案资源管理器中右键单击 App_Data 文件夹在提供的菜单中选择 Add New Item此操作将启动添加新项目对话框选择该对话框中的 SQL 数据库作为创建应用程序所使用的文件类型请确保将该文件命名为 Librarymdf

一旦创建该文件App_Data 文件夹中即出现新的 Librarymdf 文件双击该文件可在 Visual Studio Server Explorer 中打开它这一点与 ASPNETDBMDF 文件一样

如果尝试展开服务器资源管理器中的 Tables 文件夹那么除了文件夹左侧的加号图标不见以外没有其他反应这是由于当前 Librarymdf 文件中没有任何表

要创建第一张表只需右键单击服务器资源管理器中 Librarymdf 下的 Tables 文件夹并在提供的菜单中选择 Add New Table 即可您需要为本文的应用程序创建两张表第一张表命名为 MediaTypes它将处理媒体共享库 (Media Share Library) 应用程序所使用的自定义类别请记住库中存储的每个项目都需要以某种方式进行分类(例如 DVDCD书籍等)而且这些类别是根据 MediaTypes 表的内容动态生成的MediaTypes 表是要创建的一张简单的表

创建表时只要提供有关列的一些简要信息即可创建这些数据库的列

在创建数据库中的信息表时通常情况下比较合适的做法是用唯一的关键字标识表中的每一行因此MediaTypes 表将包含一个标题为 MediaTypeId 的列因为要为每行定义一个绝对唯一的 ID 值所以该列类型为 int而且不允许 Null但是这不适用于列定义下一步右键单击某行开头的灰色框选择所提供菜单中的 Set Primary Key然后该行开头会出现一个黄色的关键字除此之外请确保创建的每个 ID 都用作标识符并且每个 ID 都是唯一的高亮显示某列您将能够看到文档窗口中定义的列属性在此属性窗格中设置标识说明 (Identity Specification)以便表明 ID 唯一且用于标识

设置 MediaTypeId 列后下一步是创建该表中的其他两列MediaTypeName (nvarchar()) 和 MediaComments (nvarchar(MAX))浏览该表时不费吹灰之力就能辨别每列在本应用程序中的用途如前所述MediaTypeId 用作该表每行的标识符MediaType 是应用程序实际呈现给最终用户的类别名而且实际上应用程序根本不使用 MediaComments它只是允许开发人员或数据库管理员按需为每个类别提供注释

一旦表就绪请按 CTRL+S 来保存表定义然后会出现一个对话框提示您为新表命名

请确保将该表命名为 MediaTypes

创建 MediaTypes 表后再创建下一张表该表用于存储应用程序中保存的所有库项目该表也指示这些项目是否为某人所借用借用人是谁以及何时归还给所有者

从该表定义中您会发现某些数据项来源于应用程序所使用的其他表或数据库例如UserName 列存储的注册用户的用户名该值最初是通过 ASPNET 成员关系系统从 ASPNETDBMDF 文件获取的此外MediaType 列只是存储了一个数字该数字与前面创建的 MediaTypes 表所使用的某个唯一 ID 相关

既然这两张表已经准备就绪下面我们来介绍应用程序如何从这些表中提取并存储数据下面继续介绍ASPNET构建数据层

使用新的数据源服务器控件提取和发送数据

通过 NET 提取数据库数据(或将数据发回数据库)有若干种方法因此必须找出一种最适合您的应用程序和实际情况的数据检索方案ASPNET 通过引入一系列全新的数据源服务器控件使这一过程变得十分简单

新的 ASPNET 数据源控件提供一种声明方法通过它可连接到数据存储并检索应用程序所需的数据使用新数据源控件的步骤比以往使用 ASPNET x 所采用的步骤更简单

您可以任意使用 个新数据源服务器控件一些新的数据源控件是专门为使用 Microsoft SQL Server新的 Microsoft SQL Server Express Edition 数据库文件XML 文件等而设计的这些数据源控件可以连接到指派的数据存储检索数据并执行通过各种服务器控件属性指定的任何数据操作

使用 SqlDataSource 控件选择数据

仔细观察 Media Share Library Starter Kit 代码会发现其中多次使用了数据源控件以选择插入更新或删除 Librarymdf 数据库文件中存储的信息我们首先来看一些简单的 Select 示例

MainLibraryaspx 页(位于媒体共享库 (Media Share Library) 应用程序的 Library 文件夹中)上有一个简单数据检索的典型示例该页含有一个 GridView 服务器控件该控件显示输入到库中的某一特定类别的所有项目最终用户通过一个下拉列表控件完成类别选择该控件位于显示结果的 GridView 控件的正上方那么类别数据又是如何填充到下拉列表控件的?其实这是通过使用一个 SqlDataSource 控件完成的该控件从上文创建的 MediaTypes 表中提取类别列表一旦获得类别列表就将其传递给下拉列表控件首先SqlDataSource 控件从 Librarymdf 数据库文件中提取类别列表

这是一个相当简单的 SqlDataSource 控件示例与 ASPNET 中的其他服务器控件一样控件内必须首先设置一个 ID 值和 runat=server下一个要注意的重要项目是 ConnectionString 属性该属性通过 <%$ ConnectionStrings:LibraryConnectionString %> 值指向 nfig 文件中的一个位置但是该值的含义没有直接点明其真正表示的意思是使用的值需要从 nfig 文件的 <ConnectionStrings> 部分提取即使用名为 LibraryConnectionString 的特定 <add> 节点内的值

创建 SqlDataSource 控件的 ConnectionString 属性后还需要留意 SelectCommand 属性该属性接收 Select TSQL 命令这些命令用于提取 Librarymdf 数据库文件中特定表的数据以本文为例提取 MediaTypes 表的 MediaTypeName 和 MediaTypeId 列按字母顺序进行排列后再传递给本页的下拉列表控件

将选定的数据绑定到服务器控件

设置好 ConnectionStringSelectCommand 属性后即可将 SqlDataSource 控件绑定到页面上的一个或多个控件然而本文示例只是将 SqlDataSource 控件绑定到 DropDownList 这一个控件

下拉列表通过使用 DataSourceID 属性将自身绑定到 SqlDataSource 控件的输出所有数据绑定服务器控件均可使用该属性提供给 DataSourceID 属性的值就是 SqlDataSource 控件(本示例的 SqlDataSource)中使用的 ID下拉列表在该处有特殊的可用性需求 — 在文本字段和可选值字段中放置一个值

我们将分别使用 MediaTypeIdMediaTypeName 的值作为 <option> 的值和显示给最终用户的值DropDownList 服务器控件的使用是通过 DataTextFieldDataValueField 属性的使用来完成的

由于 DropDownList 现在绑定到 SqlDataSource 控件的输出因此页面将动态地提取输出结果

选择带有参数的数据

有时您必须选择基于某一特定参数的数据即所谓的参数化查询例如想要一份客户数据库中所有加拿大客户的列表这即是一个参数化查询您不想要所有客户的列表这样的列表繁杂冗长如果将某个值(本示例为 Canada)传递给 Select 语句将返回一个经过筛选的结果集

Media Share Library Starter Kit 中的 MainLibraryaspx 页上还有一个 GridView 控件该控件由另一个 SqlDataSource 控件 (SqlDataSource) 驱动后者需要参数化查询来获取结果本示例的 GridView 实际上由最终用户通过选择下拉列表控件(上文图 所示)的项目来控制如果最终用户选择下拉列表中的 DVD那么在 Select 语句中将使用该值GridView 控件只显示返回的 DVD 类别的库项目当然GridView 中显示的数据完全由 SqlDataSource 控件控制

观察该 SqlDataSource 控件会发现它与我们在上文看到的 SqlDataSource 控件之间有很多相似之处尽管有相似之处但是也有一些显着的差别最明显的一点是 SelectCommand 值要长得多造成该结果的一个原因是要检索 Media 表中的大量列值另一个更有趣的原因源于命令中的 WHERE 语句

WHERE ([MediaType] = @MediaType) ORDER BY [MediaName]

这行代码表示的真正含义是SqlDataSource 控件要选择 Media 表中 MediaType 列值等于某个特定参数的所有已定义列我们稍后将用 @MediaType 定义该参数获得这些值后需要根据 MediaName 列的值按字母顺序排序

以声明方式定义参数

依据上文来看稍后为 @MediaType 变量赋值很重要赋值的方法有两种 — 声明方式或编程方式

首先回顾如何以声明方式定义参数

我们可以使用 SqlDataSource 控件的 <SelectParameters> 部分为 @MediaType 变量赋值因为 Select 语句中至少有一个参数需要定义(请参看上文列表 中的示例)除 <SelectParameters> 部分之外SqlDataSource 控件还有 <DeleteParameters><FilterParameters><InsertParameters> 和 <UpdateParameters>下列控件可以在 <SelectParameters> 部分内嵌套使用

上一篇:ASP.NET自动发送邮件功能的实现

下一篇:浅谈ASP.NET与HTML页面关系