本期将继续为您介绍以下教程:您将学习如何在网页中使用数据库,以及使网页更加动态。
导读:Microsoft WebMatrix是一个免费的工具,可用于创建、自定义和在Internet上发布网站。
WebMatrix使您能够轻松创建网站。您可以从一个开源应用程序(比如WordPress、Joomla、 DotNetNuke或Orchard)开始,WebMatrix会为您处理下载、安装和配置这些应用程序的任务。或者您可以使用许多内置的模板自行编写代码,这些模板有助于您迅速上手。无论您做何选择,WebMatrix都提供了您的网站运行所需的一切内容,包括Web服务器、数据库和框架。通过在您的开发桌面使用与您将在Web主机上使用的相同堆栈,将网站上线的过程变得既轻松又顺利。
您可以从http://web.ms/webmatrix下载它。
现在您只需花几个小时便可学会使用WebMatrix、CSS、HTML、HTML5、ASP.NET、SQL、数据库等知识以及如何编写简单的Web应用程序。内容如下:
目前为止您了解了如何使用WebMatrix创建HTML网页,如何使用级联样式表(CSS)有效设置网页的样式,以及如何使用WebMatrix中内置的布局功能和“Razor”语法来将您的注意力集中在网页的内容上,而不是分散到其他杂事上。
在本章中,我们将介绍如何转变您已在使用的静态电影列表,我们将使其动态化。实际来讲,无需使用HTML手动编写电影列表,我们会将它们放在一个数据库中,我们还会让WebMatrix读取该数据库并为我们生成HTML。通过这种方式,我们可以轻松更改数据库,以及自动更新网页。
在WebMatrix中创建数据库
首先,在WebMatrix中找到“Databases”工作区并打开它。在窗口中央,您将看到选项“Add a Database to your site”。

选择此选项,WebMatrix将创建一个名为“Movies.sdf”的新数据库。如果您的网站有一个不同的名称,比如“foo”,WebMatrix将基于该名称创建一个数据库(也即foo.sdf)。
您将在窗口左侧的数据库资源管理器中看到该数据库:

向数据库添加表
在窗口顶部,您将看到一个工具功能区,其中显示了您可以对数据库执行的不同操作,包括创建表和查询,以及迁移到其他数据库。从此功能区,选择“New Table”工具。如果选择它时未发生任何事情,请确保您在数据库资源管理器中选择了Movies.sdf。

WebMatrix将为您创建表并打开列编辑器。这允许您在数据库表中创建新列。在数据库词汇中,记录指的是特定实体的所有数据。所以,举例而言,一个人的数据可能是他的姓名、年龄、地址和电话号码记录。列是各个数据部分的值,无论它们位于哪个记录中。所以,在上面的示例中,Name将是一列,Age也是。
所以,对于我们的电影,我们将创建一个类似于下图的数据库:

首先,我们创建ID。ID是特定记录的标识符。您无需拥有ID,尤其是对于这样的简单数据库,但是创建ID是一种很好的做法。当您构建更加复杂的数据库时,您将发现它们对于跟踪和查询数据非常重要。
在列编辑器中,如下图所示,填写详细信息:

这会为该列提供名称“id”,并将它指定为一个编号(bigint),该编号必须有一个值(将Allow Nulls设置为False)。然后它指定该字段为一个ID,这表示我们告诉了数据库我们将此字段用作ID。这样做的好处是,只要我们向数据库添加新记录,它就会自动更新ID,所以我们无需担忧如何跟踪最新添加的内容、获得它的ID并计算出新记录。
现在我们表明了此字段是主键。再次说明,“主键”是一个数据库词汇。键是数据库中具有特殊值的列,通常是您在挑选记录时希望使用的主要内容。数据库使用它们来简化数据的查找。例如,您的工作场所可能为您分配了一个员工编号。此编号使得很容易跟踪您,因为搜索编号“333102”可能比搜索员工“Nizhoni Benally”简单得多,尤其是在您企业中拥有大量员工时。这使您的员工编号成为了用于查找您的键。您可以在数据中使用许多键,主键应该视为最重要的一个。
所以,当在数据库中记录电影时,我们将为每个电影提供一个ID,我们将该ID 设置为主键。
使用功能区中的“New Column”按钮创建另外3列。您将在表中看到3个未命名的空白列。
选择第一个空白行,将它命名为“Name”,将数据类型设置为“ntext”。确保“Is Identity”和“Is Primary Key”为 False。

对于第二个空白行,将它命名为“ReleaseYear”并将它的数据类型保持为“bigint”。
对于第三个空白行,将它命名为“Genre”并将它的数据类型设置为“ntext”。
按下WebMatrix标题栏中的保存按钮保存表。

您将看到一个对话框,要求输入表的名称。将它命名为“Favorites”。

您将看到在窗口左侧显示了该表。

向表添加数据
在此资源管理器中双击该表,该表将打开,其中没有任何数据。

将光标放在Name字段中并向其中键入一个值。完成之后,按下键盘上的Tab键移动到下一个字段(Release Year),为它提供一个值并按Tab键,为Genre提供一个值。

当再次按下Tab键时,您将看到id字段中拥有编号“1”。在此列中不输入任何内容,让数据库输入内容,这是一种不错的想法。您会看到光标现在位于字段中,所以再此按下Tab键返回到Name字段。
多次重复这些步骤输入一些电影。下面是我们目前使用的4部电影。

创建使用数据的网页
在上一篇文章中,您看到了网站使用了布局来创建HTML<head>、样式、正文以及其他内容。如果您是按照本文所述步骤操作的,那么您就已经设置了一个_siteLayout.cshtml和一个_PageStart.cshtml。如果您没有,此代码的剩余内容将不会生效,您将需要返回执行第3部分中的步骤才能使它们生效。
使用布局的一个好处是,您现在仅需要编写特定网页的特定代码,模板上的@RenderBody()调用会将它注入到完整的页面中。
记住这一点之后,创建一个新CSTHML网页并将它命名为 dataMovies.cshtml。
将此网页中的所有代码替换为我们目前为止使用的静态HTML:
| 1: <div id="movieslist"> 2: <ol> 3: <li><a href="#">It's a wonderful life</a></li> 4: <li><a href="#">Lord of the Rings</a></li> 5: <li><a href="#">The Fourth World</a></li> 6: <li><a href="#">The Lion King</a></li> 7: </ol> 8: </div> 9: |
该静态列表中包含4项。如果我们想要第5项,可以添加一个新<li></li>条目。
当从数据库拉取数据时,网页不知道数据库中有多少项,所以它将必须生成“n”个<li></li>元素,其中“n”是数据库中的记录数量。这非常适合于代码循环,稍后您将编写这样一个循环。
但是在这么做之前,首先需要告诉页面数据库的信息。在dataMovies.cshtml的顶部,输入以下代码:
|
1: @{ 2: var db= Database.Open("Movies"); 3: var sqlQ = "SELECT * FROM Favorites"; 4: var data = db.Query(sqlQ); 5: } 6: |
如果您使用Java、C++、C或C#编写代码,您可能认识它们,它们就是所谓的“花括号”。
我们逐行看一下此代码:
var db= Database.Open("Movies");
“var”表示变量,这是一个包含数据的可寻址项。该代码告诉服务器打开名为“Movies”的数据库,将对此数据库的引用存储在我们称为“db”的变量中。
var sqlQ = "SELECT * FROM Favorites";
然后这行代码创建一个名为sqlQ的变量,将SQL命令“SELECT * FROM Favorites”存储在其中。
当使用数据库时,常常使用一种名为“结构化查询语言”(SQL)的语言来查找您想要的数据。实际上,它不仅仅能够查询数据,还可用于插入新数据,您在后面的部分中将看到,但现在我们仅使用它来获取数据。
当从数据库获取数据时,经常使用“SELECT”命令。语法是“SELECT<某种内容>FROM<某个地方>WHERE <条件>”
<某种内容>可以是一个字段列表或表示“所有内容”的通配符(*)字符,我们没有设置条件,所以“SELECT * FROM Favorites”命令要求数据库获取Favorites表中的所有列和所有记录。
var data=db.Query(sqlQ);
这使网页上的主要操作。前面您打开了数据库并使用变量“db”引用了它。WebMatrix非常智能,能够知道您打开的是数据库,WebMatrix中的数据库对象包含您可以调用的许多函数(通常称为“方法”)。其中一种是“Query”方法,它运行一条SQL命令。您将该命令作为一个字符串传递给它,数据库执行它,返回一组记录。然后会将这一组记录加载到名为“data”的变量中。现在我们拥有了自己的数据,可以对它执行一些有趣的操作了。
现在,您的网页应该类似于:
|
1: @{ 2: var db= Database.Open("Movies"); 3: var sqlQ = "SELECT * FROM Favorites"; 4: var data = db.Query(sqlQ); 5: } 6: <div id="movieslist"> 7: <ol> 8: <li><a href="#">It's a wonderful life</a></li> 9: <li><a href="#">Lord of the Rings</a></li> 10: <li><a href="#">The Fourth World</a></li> 11: <li><a href="#">The Lion King</a></li> 12: </ol> 13: </div> 14: |
首先,删除除<li>字段外的所有内容,使您的<ul>类似于:
|
1: <ul> 2: <li><a href="#">It's a wonderful life</a></li> 3: </ul> |
使用“Razor”,使用@符号添加代码,编写的循环将类似于:
|
1: <ul> 2: @foreach(var row in data) 3: { 4: <li><a href="#">It's a wonderful life</a></li> 5: } 6: </ul> 7: |
当然,得到的结果将是编写4次“It’s a wonderful life”,因为我的数据库中有4个条目。

服务器仅知道它被告知的操作,该代码告诉它写出数据中每行的电影题目。
更多详情请点击:WebMatrix进阶教程(5):如何在网页中使用数据库
相关阅读:
微软Web平台优秀项目精选推荐:
开放源代码编程框架和内容管理系统: SilverStripe CMS
功能齐全的内容管理系统:Kentico CMS for ASP.NET
【 发表评论 0条 】