# 单元 1：创建 ASP 网页

在单元 1 中，将使用 HTML 和 Microsoft® Visual Basic® Scripting Edition (VBScript) 创建 ASP 网页（.asp 文件）。此单元包含下列课程：

- 第 1 课：编写 ASP 网页 如何使用 HTML 和 VBScript 编写并运行 ASP 网页的四个示例。
- 第 2 课：使用表单提交信息 在 HTML 网页上开发表单，使用户可以输入他们的个人数据。
- 第 3 课：创建使用数据库的意见簿 使用表单收集访问者的信息，将这些信息存储到 Microsoft Access 数据库中，并在网页上显示此数据库的内容。
- 第 4 课：显示 Excel 电子表格 在网页上显示 Microsoft Excel 电子表格。

## 第 1 课：编写 ASP 网页

学习 ASP 的最佳方法是先研究示例，然后更改感兴趣的整数值、字符串以及语句，并在浏览器中观察发生的变化。

在本课程中，您将执行下列任务：

- 示例 1 使用 HTML 和 VBScript 创建、保存和运行 ASP 网页。
- 示例 2、 3 和 4 使用内置函数和条件脚本语句在 ASP 网页中添加功能和逻辑。

VBScript 是用于 ASP 网页的默认脚本语言，但其分隔符与 JScript 相同。使用尖括号作为 HTML 标记的分隔符（如在任何 .htm 网页中一样），如下所示：

`<example></example>`

使用百分号和尖括号作为脚本代码的分隔符，如下所示：

`<% example %>`

可以将多条脚本语句放在一对脚本分隔符中，如下例所示：

`

<font face="MS Gothic">
<%
'创建一个变量。
dim strGreeting
'设置欢迎词
strGreeting = "Hello World!"
'使用 ASP Response 对象输出欢迎词。
Response.Write strGreeting & "<BR>"
'同时使用 <%= 方法输出欢迎词。
%>
<%=strGreeting%>
</font>

`

此代码将在浏览器中显示下列文字：

Hello World!
Hello World!

下面是使用 JScript 实现上述功能的示例:

`<%@ Language=JScript %>
<font face="MS Gothic">
<%
//创建一个变量。
var strGreeting;
//设置欢迎词。
strGreeting = "Hello World!";
//使用 ASP Response 对象输出欢迎词。
Response.Write(strGreeting + "<BR>");
//同时使用 <%= 方法输出欢迎词。
%>
<%=strGreeting%>
</font>`

创建 ASP 网页时，可以使用一个类似于记事本的文本编辑器编写代码，并以 .asp 而非 .htm 作为扩展名保存。.asp 文件扩展名告知 IIS 在将网页发送到客户端之前要通过 ASP 引擎。（注意：在记事本的“另存为”对话框中，当“保存类型”选择为“文本文档 (*.txt)”时，记事本会自动将 .txt 追加到文件名后。为防止这种情况发生，请将“保存类型”选择为“所有文件”，并在“文件名”字段中键入完整的文件名“MyFile.asp”，然后单击“保存”按钮。）

### 示例 1

本示例用于显示欢迎词、日期和当前时间。要运行本示例，请将下列代码复制并粘贴到一个空文件中，并将其保存在 x:\Inetpub\Wwwroot\Tutorial 目录中，文件名为“Example1.asp”。在浏览器地址栏中键入 http://localhost/Tutorial/Example1.asp 查看此示例。

`

<%@ Language=VBScript %>
<html>
<head>
<title>示例 1</title>
</head>
<body>
<font face="宋体">
<H1>欢迎访问我的主页</H1>
<%
'创建一些变量。
dim strDynamicDate
dim strDynamicTime
'获取日期和时间。
strDynamicDate = Date()
strDynamicTime = Time()
'将 strDymamicTime 中的后两个字符与 "PM" 比较，并基于当前时间输出欢迎词。
If "PM" = Right(strDynamicTime, 2) Then
Response.Write "<H3>下午好!</H3>"
Else
Response.Write "<H3>上午好!</H3>"
End If
%>
今天是 <%=strDynamicDate%>，时间 <%=strDynamicTime%>
</font>
</body>
</html>

`

在浏览器中，您将看到类似于下面的结果（取决于执行此练习的日期和时间）：

# 欢迎访问我的主页

### 下午好！

今天是 2000-10-20，时间 7:29:50 PM

注意：站点服务器按下列顺序处理 Example1.asp：

1. <%@ Language=VBScript %>告知 ASP 引擎使用 VBScript 引擎解析脚本代码。
2. ASP 引擎忽略 HTML 代码块。
3. ASP 引擎执行 <%...%> 块中的代码，并用占位符替换这些块。将 Response.Write 字符串和 <%=...%> 字符串的结果保存到服务器的内存中。
4. 在网页离开 ASP 引擎之前，将 Response.Write 字符串和 <%=...%> 字符串的结果插入到 HTML 代码中的相应占位符处。
5. 完整的网页以一个 HTML 代码文件形式离开 ASP 引擎。然后，服务器将此网页发送到客户端。

### 示例 2

此示例在 ASP 网页中加进一个 For...Next 循环以添加一些动态逻辑。For...Next 循环是可使用的六个条件语句之一。另外五个条件语句是：Do...Loop、For Each...Next、If...Then...Else...End If、Select..Case...End Select 和 While...Wend。您可以在 Windows Script Technologies 的 VBScript 部分找到这些语句的描述。

请将下列代码复制并粘贴到文本编辑器中，并保存为“Example2.asp”。在浏览器地址栏中键入 http://localhost/Tutorial/Example2.asp 查看此示例。

此示例的处理过程与 Example1.asp 相同。

`

<%@ Language=VBScript %>
<html>
<head>
<title>示例 2</title>
</head>
<body>
<font face="宋体">
<%
'创建一个变量。
dim strTemp
dim font1, font2, font3, font, size
'设置此变量。
strTemp= "请购买我的产品！"
fontsize = 0
'使用 For...Next 循环输出字符串 5 次。
For i = 1 to 5
'闭合脚本分隔符以允许使用 HTML 代码和 <%=...
%>
<table align=center><font size= <%=fontsize%>> <%=strTemp%> </font></table>
<%
fontsize = fontsize + i
Next
%>
<table align=center><font size=6><B> 棒极了！ <B></font></table><BR>
</font>
</body>
</html>

`

在浏览器中，您应该看到类似于下面的结果：

请购买我的产品！

请购买我的产品！

请购买我的产品！

请购买我的产品！

请购买我的产品！

棒极了！

下面是使用 JScript 编写的示例 2：

`<%@ Language=JScript %>
<html>
<head>
<title>示例 2</title>
</head>
<body>
<font face="宋体">
<%
//创建一个变量。
var strTemp;
var font1, font2, font3, font, size;
//设置变量。
strTemp= "请购买我的产品！";
fontsize = 0;
//使用 For...Next 循环输出字符串 5 次。
for (i = 1; i < 6; i++) {
//闭合脚本分隔符以使用 HTML 代码和 <%=...
%>
<table align=center><font size= <%=fontsize%>> <%=strTemp%> </font></table>
<%
fontsize = fontsize + i;
}
%>
<table align=center><font size=6><B> 棒极了！<B></font></table><BR>
</font>
</body>
</html>`

### 示例 3

随着企业意识到必须在世界范围内推销其产品，多语种网站每天都在层出不穷。因此，设置日期、时间和货币的格式，使之与用户所在区域相匹配对开拓市场大有裨益。

在示例 3 中，使用一个预定义函数在 ASP 网页上显示日期和货币。对于不同的区域，可以使用 GetLocale、SetLocale、FormatCurrency 和 FormatDateTime 函数，为不同的区域设置日期和货币的格式。MSDN 的 Locale ID Chart 中列出了区域标识字符串。（本示例不包括更改“代码页”以实现在欧洲语言操作系统上显示非欧洲语言字符。详细信息，请参阅 IIS 文档中的“代码页”主题。）

注意：在 VBScript 中有 90 多个预定义函数，Windows Script Technologies 中对这些函数进行了详细定义。要查看此文档，请选择“VBScript”，选择“Documentation”，选择“Language Reference”，再选择“Functions”。

将下列代码复制并粘贴到文本编辑器中，并保存在 x:\Inetpub\Wwwroot\Tutorial 目录中，文件名为“Example3.asp”。在浏览器地址栏中键入 http://localhost/Tutorial/Example3.asp 查看此示例。

`

<%@ Language=VBScript %>
<html>
<head>
<title>示例 3</title>
</head>
<body>
<font face="宋体">
<H3>感谢您购买我们的产品。请打印此网页以作为记录。</H3>
<%
'创建一些变量。
dim saveLocale
dim totalBill
'设置变量。
saveLocale = GetLocale
totalBill = CCur(85.50)
'为每个区域设置日期和货币的格式
SetLocale("fr")
Response.Write"<B>设置为法语格式：</B><BR>"
Response.Write FormatDateTime(Date, 1) & "<BR>"
Response.Write FormatCurrency(totalBill) & "<BR>"
SetLocale("de")
Response.Write"<B>设置为德语格式：</B><BR>"
Response.Write FormatDateTime(Date, 1) & "<BR>"
Response.Write FormatCurrency(totalBill) & "<BR>"
SetLocale("en-au")
Response.Write"<B>设置为英语格式 - 澳大利亚：</B><BR>"
Response.Write FormatDateTime(Date, 1)& "<BR>"
Response.Write FormatCurrency(totalBill) & "<BR>"
'还原为原来的区域设置
SetLocale(saveLocale)
%>
</font>
</body>
</html>

`

在浏览器中，您应看到下列结果：

### 感谢您购买我们的产品。请打印此网页以作为记录。

设置为法语格式：
vendredi 20 octobre 2000
85,50 F
设置为德语格式：
Freitag, 20. Oktober 2000
85,50 DM
设置为英语格式 - 澳大利亚：
Friday, 20 October 2000
$85.50

### 示例 4

在 ASP 脚本中，字符串操作函数是最常使用的函数。最强大的字符串函数使用正则表达式。因为正则表达式较难掌握，示例 4 显示了如何使用字符串表达式和正则表达式替换字符串中的字符。Windows Script Technologies 中对正则表达式进行了定义。要查看此文档，请选择“VBScript”，选择“Documentation”，再选择“Regular Expressions Guide”。

将下列代码复制并粘贴到文本编辑器中，并将其保存在 x:\Inetpub\Wwwroot\Tutorial 目录中，文件名为“Example4.asp”。在浏览器地址栏中键入 http://localhost/Tutorial/Example4.asp 查看此示例。

`

<%@ Language=VBScript %>
<html>
<head>
<title>示例 4</title>
</head>
<body>
<font face="宋体">
<H3>更改客户的街道地址</H3>
<%
'创建一些变量。
dim strString
dim strSearchFor ' 定义为字符串
dim reSearchFor ' 定义为正则表达式
dim strReplaceWith
'设置变量。
strString = "Jane Doe<BR>100 Orange Road<BR>Orangeville, WA<BR>98100<BR>800.555.1212<BR>"
' 使用字符串对象
strSearchFor = "100 Orange Road<BR>Orangeville, WA<BR>98100"
' 使用正则表达式对象
Set reSearchFor = New RegExp
reSearchFor.Pattern = "100 Orange Road<BR>Orangeville, WA<BR>98100"
reSearchFor.IgnoreCase = False
strReplaceWith = "200 Bluebell Court<BR>Blueville, WA<BR>98200"
'检查 strSearchFor 是否存在...
' 使用字符串对象。
If Instr(strString, strSearchFor) Then
Response.Write "在 strString 中找到 strSearchFor<BR>"
Else
Response.Write "未找到"
End If
' 使用正则表达式对象。
If reSearchFor.Test(strString) Then
Response.Write "在 strStringre 中找到 SearchFor.Pattern<BR>"
Else
Response.Write "未找到"
End If
'替换字符串...
Response.Write "<BR>原字符串：<BR>" & strString & "<BR>"
' 使用字符串对象。
Response.Write "替换了 strSearchFor 后的字符串：<BR>"
Response.Write Replace(strString, strSearchFor, strReplaceWith) & "<BR>"
' 使用正则表达式对象。
Response.Write "替换了 reSearchFor 后的字符串：<BR>"
Response.Write reSearchFor.Replace(strString, strReplaceWith) & "<BR>"
%>
</font>
</body>
</html>

`

在浏览器中，您应看到下列结果：

### 更改客户的街道地址

在 strString 中找到 strSearchFor
在 strString 中找到 reSearchFor.Pattern
原字符串：
Jane Doe
100 Orange Road
Orangeville, WA
98100
800.555.1212
替换了 strSearchFor 后的字符串：
Jane Doe
200 Bluebell Court
Blueville, WA
98200
800.555.1212
替换了 reSearchFor 后的字符串：
Jane Doe
200 Bluebell Court
Blueville, WA
98200
800.555.1212

## 第 2 课：使用表单提交信息

Intranet 和 Internet 服务器应用程序的一个常见用途就是在网页中实现一个表单，接受用户输入。ASP 在 Request 对象中包含下列两个集合：QueryString 集合和 Form 集合，实现了表单信息的处理。

在本课程中，您将创建一个 HTML 网页，使用一个 HTML 表单接受用户输入，并将用户输入返回站点服务器的同一网页。站点服务器随后显示用户输入。在本单元的最后，您将利用这些有关表单的知识，使用 ASP 脚本建立一个意见簿应用程序。要完成此课程，您应当执行下列任务：

- 示例 1 在表单中显示一组按钮。
- 示例 2 在表单中显示文本框，从表单接受用户输入，随后在网页上显示用户输入。

### 示例 1：按钮

表单可以包含多种不同类型的元素帮助用户输入数据。在本示例中，将创建五个称为按钮的输入表单元素。此外，还有多种类型的按钮，包括 RADIO 按钮、SUBMIT 按钮、RESET 按钮、CHECKBOX 按钮和 TEXT 按钮。

用户在表单中输入信息之后，需要将信息发送到 Web 应用程序。用户单击网页中的“提交”按钮之后，表单数据将从客户端发送到在表单标记 ACTION 元素中列出的网页。此网页不必与调用网页相同。本示例中，在 ACTION 元素中列出的网页与调用网页相同，不需要再调用其他网页。

在本示例中，METHOD="POST" 用于将数据从站点客户端浏览器发送到站点服务器。当您在表单中使用 METHOD="POST" 时，用户数据最终保存在 Request 对象的 Form 集合中。

将下列代码复制并粘贴到文本编辑器中，并保存在 x:\Inetpub\Wwwroot\Tutorial 目录中，文件名为“Button.asp”。在浏览器地址栏中键入 http://localhost/Tutorial/Button.asp 查看此示例。

`

<%@ Language=VBScript %>
<html>
<head>
<title>按钮表单</title>
</head>
<body>
<font face="宋体">
<FORM NAME="Button Example" METHOD="POST" ACTION="button.asp">
<H3>计算机编程经验：</H3>
<p>
<INPUT TYPE="RADIO" NAME= "choice" VALUE="少于 1 年"> 少于 1 年。<BR>
<INPUT TYPE="RADIO" NAME= "choice" VALUE="1-5 年"> 1-5 年。<BR>
<INPUT TYPE="RADIO" NAME= "choice" VALUE="多于 5 年"> 多于 5 年。<BR>
</p>
<p>
<INPUT TYPE="SUBMIT" VALUE="提交">
<INPUT TYPE="RESET" VALUE="清除表单">
</p>
</form>
<%
'查看是否存在输入信息。
dim strChoice
strChoice = Request.Form("choice")
If "" = strChoice Then
Response.Write "<P>（尚未输入。）</P>"
Else
Response.Write "<P>您的最终选择是 <B>" & strChoice & "</B></P>"
End If
%>
</font>
</body>
</html>

`

在浏览器中，您应看到下列结果：

### 计算机编程经验：

少于 1 年。
1-5 年。
多于 5 年。

（尚未输入。）

### 示例 2：输入表单元素

在本示例中，将创建三个称为文本字段的输入表单元素和两个称为复选框的输入表单元素。复选框与选项按钮不同，可以进行多选。此示例仍需使用默认的“提交”按钮将数据发送回服务器。

在本示例中，METHOD=GET 用于将数据从站点客户端浏览器发送到站点服务器。在表单中使用 METHOD=GET 时，用户数据最终保存在 Request 对象的 QueryString 集合中。

单击“提交”按钮之后，查看地址栏，您将看到 QueryString 元素显示在 URL 的尾部。

将下列代码复制并粘贴到文本编辑器中，将其保存在 x:\Inetpub\Wwwroot\Tutorial 目录中，文件名为“Text.asp”。在浏览器的地址栏中键入 http://localhost/Tutorial/Text.asp 查看此示例。

`

<%@ Language=VBScript %>
<html>
<head>
<title>文本和复选框表单</title>
</head>
<body>
<font face="宋体">
<FORM NAME="TextCheckbox Example" METHOD="GET" ACTION="text.asp">
<H3>要获取我们的产品信息，请填写此表单：</H3>
<p>
<table>
<tr>
<td><font face="宋体">姓名（必需）</td>
<td><INPUT TYPE="TEXT" NAME="name" VALUE="" SIZE="20" MAXLENGTH="150"></td>
</tr><tr>
<td><font face="宋体">公司</td>
<td><INPUT TYPE="TEXT" NAME="company" VALUE="" SIZE="25" MAXLENGTH="150"></td>
</tr><tr>
<td><font face="宋体">电子邮件（必需）</td>
<td><INPUT TYPE="TEXT" NAME="email" VALUE="" SIZE="25" MAXLENGTH="150"></td>
</tr>
</table>
</p>
<p>
要了解的信息：<BR>
<INPUT TYPE="CHECKBOX" NAME= "info" VALUE="软件">软件<BR>
<INPUT TYPE="CHECKBOX" NAME= "info" VALUE="硬件">硬件 <BR>
</p>
<p>
<INPUT TYPE="SUBMIT" VALUE="提交">
<INPUT TYPE="RESET" VALUE="清除表单">
</p>
</form>
<%
'检查是否存在输入信息。
dim strName, strEmail, strCompany, strInfo
strName = Request.QueryString("name")
strEmail = Request.QueryString("email")
strCompany = Request.QueryString("company")
strInfo = Request.QueryString("info")
'显示输入的信息。
If ("" = strName) OR ("" = strEmail) Then
Response.Write "<P>（尚未输入必需的信息。）</P>"
Else
Response.Write "<P>您是 "& strName &"。"
If Not ("" = strCompany) Then
Response.Write "<BR>来自 " & strCompany &"。"
End If
Response.Write "<BR>您的电子邮件地址是 " & strEmail &"。"
If Not ("" = strInfo) Then
Response.Write "<BR>您希望了解" & strInfo & "方面的信息。</P>"
End If
End If
%>
</font>
</body>
</html>

`

在浏览器中，您应看到下列结果：

### 要获取我们的产品信息，请填写此表单：

姓名（必需） |
公司 |
电子邮件地址（必需） |

要了解的信息：
软件
硬件

（尚未输入必需的信息。）

## 第 3 课：创建使用数据库的意见簿

本课程要求在系统中已安装了 Microsoft Access，且示例不支持在 64 位平台上运行，除非 Access 是为 64 位平台开发的版本。

在第 3 课中，将开发一个意见簿应用程序。此意见簿允许访问网站的用户留下信息，例如姓名、电子邮件地址和评论等。在本课程中，您将在创建一个 Access 数据库后执行下列任务：

- 示例 1 创建一个 ASP 网页，仅使用 ADO Connection 对象连接到数据库。
- 示例 2 创建一个 ASP 网页，同时使用 Connection 对象和 Command 对象连接到数据库。
- 示例 3 创建一个 ASP 网页，在浏览器中从数据库显示意见簿的信息。

#### 创建 Access 数据库

创建一个名为“GuestBook.mdb”的 Access 数据库，并将其保存在 x:\Inetpub\Wwwroot\Tutorial 中。在“GuestBook”数据库中创建一个表。使用 Access 中的“使用设计器创建表”选项添加下列字段和属性：

字段名称 | 数据类型 | 字段常规属性
FID | 自动编号 | 字段大小=长整型， 新值=递增， 索引=有（无重复）
FTB1 | 文本 | 字段大小=255， 必填字段=否， 允许空字符串=是， 索引=无
FTB2 | 文本 | 字段大小=255， 必填字段=否， 允许空字符串=是， 索引=无
FTB3 | 文本 | 字段大小=255， 必填字段=否， 允许空字符串=是， 索引=无
FTB4 | 文本 | 字段大小=255， 必填字段=否， 允许空字符串=是， 索引=无
FMB1 | 备注 | 必填字段=否， 允许空字符串=是

#### 创建一个 ASP 网页，将数据添加到 Access 数据库

现在已经创建了数据库，可以建立一个 ASP 网页，使用 Microsoft ActiveX® Data Objects (ADO) 连接到数据库，并读取传入数据。ADO 是一个具有方法和属性的对象的集合，可以操作几乎所有类型数据库中的数据。（如果要经常使用数据库，您应购买一本 ADO 程序员参考手册。在下列示例中，仅说明了最基础的 ADO 代码，却足以对数据库进行打开、读取、写入操作）。

后面的两个示例具有相同的结果。然而，第一个示例只使用了 Connection 对象，而第二个示例则将部分工作交给 Command 对象完成，其功能更为强大。对比两个示例可以看到这些对象是如何连接在一起的。在熟悉了这些对象之后，可以使用 ADO 程序员参考手册练习更多的方法和属性。

要查看 ASP 网页中的 ADO 错误，可以在将数据库重命名、在连接字符串中输入拼写错误或将数据库设置为只读后，再浏览此网页。

### 示例 1：仅使用 ADO Connection 对象

将下列代码复制并粘贴到文本编辑器中，将其保存在 x:\Inetpub\Wwwroot\Tutorial 目录中，文件名为“GuestBook1.asp”。在浏览器地址栏中键入 http://localhost/Tutorial/GuestBook1.asp 查看此示例。

`

<%@ Language=VBScript %>
<html>
<head>
<title>仅使用 Connection 对象的意见簿</title>
</head>
<body>
<font face="宋体">
<h2>仅使用 Connection 对象的意见簿</h2>
<%
If Not Request.QueryString("Message") = "True" Then
'尚未输入信息，因此提供输入表单。
%>
<p>
<FORM NAME="GuestBook1" METHOD="GET" ACTION="guestbook1.asp">
<table>
<tr>
<td><font face="宋体">发件人：</td><td><INPUT TYPE="TEXT" NAME="From"></td>
</tr><tr>
<td><font face="宋体">电子邮件地址：</td><td><INPUT TYPE="TEXT" NAME="EmailAdd"></td>
</tr><tr>
<td><font face="宋体">抄送：</td><td><INPUT TYPE="TEXT" NAME="CC"></td>
</tr><tr>
<td><font face="宋体">主题：</td><td><INPUT TYPE="TEXT" NAME="Subject"></td>
</tr>
</table>
消息：<br><TEXTAREA NAME="Memo" ROWS=6 COLS=70></TEXTAREA>
</p>
<p>
<INPUT TYPE="HIDDEN" NAME="Message" VALUE="True">
<INPUT TYPE="SUBMIT" VALUE="提交信息">
</FORM>
</p>
<%
Else
'上面的隐藏按钮将 Message 变量设置为 True。
'现在知道已经输入了表单数据。
'从表单获取数据。将信息插入到数据库中。
'Access 不支持某些字符，如单引号，因此
' 使用 ASP Server 对象的 HTMLEncode 方法对数据进行编码。
dim strTB1, strTB2, strTB3, strTB4, strMB1, strCommand
strTB1 = Server.HTMLEncode(Request.QueryString("From"))
strTB2 = Server.HTMLEncode(Request.QueryString("EMailAdd"))
strTB3 = Server.HTMLEncode(Request.QueryString("CC"))
strTB4 = Server.HTMLEncode(Request.QueryString("Subject"))
strMB1 = Server.HTMLEncode(Request.QueryString("Memo"))
'下面是一个连接字符串。ADO 使用此字符串通过 Access 驱动程序连接到一个数据库。
'此字符串需要 Access 驱动程序的提供程序名称和 Access 数据库的名称。
'取决于使用的提供程序，连接字符串会有细微的不同，
'但都使用分号分隔变量。
'如果这些行产生错误，搜索注册表
'查找 Microsoft.JET，确定版本是否为 4.0。
strProvider = "Provider=Microsoft.JET.OLEDB.4.0;Data Source=C:\InetPub\Wwwroot\Tutorial\guestbook.mdb;"
'下面将创建一个 ADO Connection 对象示例。
'另外还有 4 个 ADO 对象可用，每个具有不同的方法和
'属性。利用这些方法和属性，可以对数据库对象进行任何操作。
Set objConn = server.createobject("ADODB.Connection")
'Connection 对象的 Open 方法使用连接字符串
'创建与数据库的连接。
objConn.Open strProvider
'定义查询。
'查询有多种类型，允许您添加、删除或获取数据。
'此查询将使用 INSERT INTO 关键字将数据添加到数据库中。
'在此，GuestBook 是表的名称。
'在此，需要使用单引号将字符串括起来。
strCommand = "INSERT INTO GuestBook (FTB1,FTB2,FTB3,FTB4,FMB1) VALUES ('"
strCommand = strCommand & strTB1 & "','" & strTB2 & "','" & strTB3 & "','" & strTB4 & "','" & strMB1
strCommand = strCommand & "')"
'执行查询，将数据添加到数据库中。
objConn.Execute strCommand
Response.Write("谢谢！数据添加成功。")
End If
%>
</font>
</body>
</html>

`

在浏览器中，您应看到下列结果：

## 仅使用 Connection 对象的意见簿

发件人： |
电子邮件地址： |
抄送： |
主题： |

消息：

### 示例 2：同时使用 Connection 对象和 Command 对象

将下列代码复制并粘贴到文本编辑器中，保存在 x:\Inetpub\Wwwroot\Tutorial 目录中，文件名为“GuestBook2.asp”。在浏览器地址栏中键入 http://localhost/Tutorial/GuestBook2.asp 查看示例。

`

<%@ Language=VBScript %>
<html>
<head>
<title>使用 Connection 对象和 Command 对象的意见簿</title>
</head>
<body>
<font face="宋体">
<h2>使用 Connection 对象和 Command 对象的意见簿</h2>
<%
If Not Request.QueryString("Message") = "True" Then
'尚未输入信息，因此提供此输入表单。
%>
<p>
<FORM NAME="GuestBook2" METHOD="GET" ACTION="guestbook2.asp">
<table>
<tr>
<td><font face="宋体">发件人：</td><td><INPUT TYPE="TEXT" NAME="From"></td>
</tr><tr>
<td><font face="宋体">电子邮件地址：</td><td><INPUT TYPE="TEXT" NAME="EmailAdd"></td>
</tr><tr>
<td><font face="宋体">抄送：</td><td><INPUT TYPE="TEXT" NAME="CC"></td>
</tr><tr>
<td><font face="宋体">主题：</td><td><INPUT TYPE="TEXT" NAME="Subject"></td>
</tr>
</table>
消息：<br><TEXTAREA NAME="Memo" ROWS=6 COLS=70></TEXTAREA>
</p>
<p>
<INPUT TYPE="HIDDEN" NAME="Message" VALUE="True">
<INPUT TYPE="SUBMIT" VALUE="提交信息">
</FORM>
</p>
<%
Else
'上面的隐藏按钮将 Message 变量设置为 True。
'现在知道已经输入了表单数据。
'从表单获取数据。将信息插入到数据库中。
'Access 不支持某些字符，如单引号，因此
'使用 ASP Server 对象的 HTMLEncode 方法对数据进行编码。
dim strTB1, strTB2, strTB3, strTB4, strMB1
strTB1 = Server.HTMLEncode(Request.QueryString("From"))
strTB2 = Server.HTMLEncode(Request.QueryString("EMailAdd"))
strTB3 = Server.HTMLEncode(Request.QueryString("CC"))
strTB4 = Server.HTMLEncode(Request.QueryString("Subject"))
strMB1 = Server.HTMLEncode(Request.QueryString("Memo"))
'Access 数据库中的备注数据类型允许您设置字段大小。
If strMB1 = "" Then
iLenMB1 = 255
Else
iLenMB1 = Len(strMB1)
End If
'下面是连接字符串。ADO 使用此字符串通过 Access 驱动程序连接到数据库。
'此字符串需要 Access 驱动程序的提供程序名称和 Access 数据库的名称。
'取决于使用的提供程序，连接字符串会有细微的不同，
'但都使用引号分隔变量。
'如果这些行产生错误，请搜索注册表
'查找 Microsoft.JET，确定版本是否为 4.0。
strProvider = "Provider=Microsoft.JET.OLEDB.4.0;Data Source=C:\InetPub\Wwwroot\Tutorial\guestbook.mdb;"
'下面将创建一个 ADO Connection 对象示例。
'另外还有 4 个 ADO 对象可用，每个具有不同的方法和
'属性。利用这些方法和属性，可以对数据库对象进行任何操作。
Set objConn = server.createobject("ADODB.Connection")
'Connection 对象的 Open 方法使用连接字符串
'创建与数据库的连接。
objConn.Open strProvider
'下面将创建一个 ADO Command 对象实例。
'尽管使用 Connection 对象几乎可以完成所有工作，
'但 Command 对象可提供更多的控制。
Set cm = Server.CreateObject("ADODB.Command")
'ActiveConnection 属性允许您连接到一个 Open 连接。
'下面将 Connection 对象连接到 Command 对象。
cm.ActiveConnection = objConn
'定义查询。
'查询有多种类型，允许您添加、删除或获取数据。
'此查询使用 INSERT INTO 关键字将数据添加到数据库中。
'因为要使用 Command 对象，需要将查询置入
'CommandText 属性中。
'在此，GuestBook 是表的名称。
cm.CommandText = "INSERT INTO GuestBook (FTB1,FTB2,FTB3,FTB4,FMB1) VALUES (?,?,?,?,?)"
'由此，可以看到 Command 对象的强大功能。
'通过将 ? 号放入上面的字符串，可以使用 Parameters 集合
'让 ADO 填充详细参数。
'cm.CreateParameter 用于设置参数的格式。
'cm.Parameters.Append 将参数追加到集合。
'请确定参数顺序与 (TB1,TB2,TB3,TB4,MB1) 的顺序相同。
Set objparam = cm.CreateParameter(, 200, , 255, strTB1)
cm.Parameters.Append objparam
Set objparam = cm.CreateParameter(, 200, , 255, strTB2)
cm.Parameters.Append objparam
Set objparam = cm.CreateParameter(, 200, , 255, strTB3)
cm.Parameters.Append objparam
Set objparam = cm.CreateParameter(, 200, , 255, strTB4)
cm.Parameters.Append objparam
Set objparam = cm.CreateParameter(, 201, , iLenMB1, strMB1)
cm.Parameters.Append objparam
'执行查询，将数据添加到数据库中。
'在此，调用的是 Command 对象的 Execute 方法，而不是
'Connection 对象的 Execute 方法。
cm.Execute
Response.Write("谢谢！数据添加成功。")
End If
%>
</font>
</body>
</html>

`

在浏览器中，您应看到与 GuestBook1.asp 相似的内容，如下所示：

## 使用 Connection 对象和 Command 对象的意见簿

发件人： |
电子邮件地址： |
抄送： |
主题： |

消息：

### 示例 3：在浏览器中显示数据库

将信息输入数据库后，可以使用包含另一脚本的网页来查看和编辑这些数据。除定义查询的方法以外，ADO 代码并没有太多的更改。
在上面两个示例中，使用 INSERT INTO 查询向数据库添加记录。在本示例中，将使用 SELECT 查询从数据库中选择记录，并将记录显示在浏览器中。还会使用 DELETE 查询从数据库中删除记录。在本示例中，唯一没有使用的查询是 UPDATE 查询，其语法与 INSERT INTO 查询相同。UPDATE 查询允许您更改数据库中的字段。

将下列代码复制并粘贴到文本编辑器中，将文件保存在 x:\Inetpub\Wwwroot\Tutorial 目录，文件名为“ViewGB.asp”。在浏览器地址栏中键入 http://localhost/Tutorial/ViewGB.asp
查看此示例。

`

<%@ Language=VBScript %>
<html>
<head>
<title>查看意见簿</title>
</head>
<body>
<font face="宋体">
<h2>查看意见簿</h2>
<%
'读取用户输入。任何用户输入都可以为空。
'先完成此步骤后，就可以将用户输入保存在表单中。
dim strTB1, strTB2, strTB3, strTB4, strMB1, strSort, iDelete
strTB1 = Server.HTMLEncode(Request.QueryString("From"))
strTB2 = Server.HTMLEncode(Request.QueryString("EMailAdd"))
strTB3 = Server.HTMLEncode(Request.QueryString("CC"))
strTB4 = Server.HTMLEncode(Request.QueryString("Subject"))
strMB1 = Server.HTMLEncode(Request.QueryString("Memo"))
strSort = Server.HTMLEncode(Request.QueryString("sort"))
iDelete = CInt(Request.QueryString("Delete"))
'由于要使用此变量，而它可能还没有设置...
If "" = strSort Then
strSort = "FID"
End If
%>
<p>
<FORM NAME="ViewGuestBook" METHOD="GET" ACTION="viewgb.asp">
<table>
<tr>
<td><font face="宋体">按列排序：</td>
<td><SELECT NAME="sort" SIZE="1">
<OPTION VALUE="FID">ID 编号</OPTION>
<OPTION VALUE="FTB1">名称</OPTION>
<OPTION VALUE="FTB2">电子邮件</OPTION>
<OPTION VALUE="FTB3">抄送</OPTION>
<OPTION VALUE="FTB4">主题</OPTION>
<OPTION VALUE="FMB1">备注</OPTION>
</SELECT></td>
</tr><tr>
<td><font face="宋体">名称包括：</td>
<td><INPUT TYPE="TEXT" NAME="From" VALUE="<%=strTB1%>"></td>
</tr><tr>
<td><font face="宋体">电子邮件地址包括：</td>
<td><INPUT TYPE="TEXT" NAME="EmailAdd" VALUE="<%=strTB2%>"></td>
</tr><tr>
<td><font face="宋体">抄送包括：</td>
<td><INPUT TYPE="TEXT" NAME="CC" VALUE="<%=strTB3%>"></td>
</tr><tr>
<td><font face="宋体">主题包括：</td>
<td><INPUT TYPE="TEXT" NAME="Subject" VALUE="<%=strTB4%>"></td>
</tr><tr>
<td><font face="宋体">备注包括：</td>
<td><INPUT TYPE="TEXT" NAME="Memo" VALUE="<%=strMB1%>"></td>
</tr>
</table>
<INPUT TYPE="SUBMIT" VALUE="提交查询参数">
</p>
<%
'创建连接字符串，创建一个 Connection 对象示例，
'连接到数据库。
strProvider = "Provider=Microsoft.JET.OLEDB.4.0;Data Source=C:\InetPub\Wwwroot\Tutorial\guestbook.mdb;"
Set objConn = Server.CreateObject("ADODB.Connection")
objConn.Open strProvider
'定义查询。
If iDelete = 0 Then
'如果没有设置 Delete 变量，查询为 SELECT 查询。
'* 表示所有字段。ASC 表示 ASCII。% 是通配符。
strQuery = "SELECT * FROM GuestBook"
strQuery = strQuery & " WHERE FTB1 LIKE '%" & strTB1 & "%'"
strQuery = strQuery & " AND FTB2 LIKE '%" & strTB2 & "%'"
strQuery = strQuery & " AND FTB3 LIKE '%" & strTB3 & "%'"
strQuery = strQuery & " AND FTB4 LIKE '%" & strTB4 & "%'"
strQuery = strQuery & " AND FMB1 LIKE '%" & strMB1 & "%'"
strQuery = strQuery & " ORDER BY " & StrSort & " ASC"
Else
'要删除一条记录。
strQuery = "DELETE FROM GuestBook WHERE FID=" & iDelete
End If
'执行 SELECT 查询，创建一个 ADO Recordset 对象。
'此对象将保存从数据库中获取的数据。
Set objRS = objConn.Execute(strQuery)
'现在已将数据库数据保存在 Recordset 对象中，
'在一个表格中显示。
%>
<p>
<FORM NAME="EditGuestBook" METHOD="GET" ACTION="viewgb.asp">
<table border=1 cellpadding=4 >
<%
On Error Resume Next
If objRS.EOF Then
If iDelete = 0 Then
Response.Write "<tr><td><font face=&quot;MS Gothic&quot;>数据库中没有相应记录。</font></td></tr>"
Else
Response.Write "<tr><td><font face=&quot;MS Gothic&quot;>记录 " & iDelete & " 已被删除。</font></td></tr>"
End If
Else
'使用 Recordset 对象的一些方法和属性输出
'字段名称。
Response.Write "<tr>"
'对于当前行的每一列...
For i = 1 to (objRS.Fields.Count - 1)
' 输出字段名。
Response.Write "<td><font face=&quot;MS Gothic&quot;><B>" & objRS(i).Name & "</B></font></td>"
Next
Response.Write "<td><font face=&quot;MS Gothic&quot;><B>删除</B></font></td>"
Response.Write "</tr>"
'使用 Recordset 对象的其他方法和属性输出字段数据。
'如果明白了某一模式的用法，
'您可以寻找其他的模式进行尝试。
'如果还没有达到记录集的尾部...
While Not objRS.EOF
Response.Write "<tr>"
'对于当前行中的每一列...
For i = 1 to (objRS.Fields.Count - 1)
' 输出字段中的数据。
Response.Write "<td><font face=&quot;MS Gothic&quot;>" & objRS(i) & "</font></td>"
Next
'添加一个按钮，接受 ID 号码来删除一条记录。
%><td><INPUT TYPE="SUBMIT" NAME="删除" VALUE="<%=objRS(0)%>"></td><%
Response.Write "</tr>"
'移到下一行
objRS.MoveNext
Wend
End If 'objRS.EOF
%>
</table>
</FORM>
<%
'关闭连接。
objConn.Close
%>
</font>
</body>
</html>

`

在浏览器中，您应看到下列结果：

## 查看意见簿

按列排序： |
名称包括： |
电子邮件地址包括： |
抄送包括： |
主题包括： |
备注包括： |

数据库中没有相应记录。

## 第 4 课：显示 Excel 电子表格

本课程要求在系统中已安装了 Microsoft Excel，且示例不支持在 64 位平台上运行，除非 Excel 是为 64 位平台开发的版本。

本课程演示如何在网页中显示一个 Microsoft Excel 电子表格。如同在以前课程中那样，将使用 ADO。然而，在本课程中，您将连接到 Excel 电子表格，而不是 Access 数据库。

#### 准备将在 Active Server Page 中显示的 Excel 电子表格

1. 使用 Excel 98 或 Excel 2000，创建一个电子表格，并将其保存在 x:\Inetpub\Wwwroot\Tutorial 中，文件名为 ASPTOC.xls。创建电子表格时不要包括任何特殊的格式或列标签。
2. 用随机数据填充一些字段。将单元格的第一行作为列名称。
3. 选中要在网页中显示的电子表格的行和列（在某一单元格中单击，然后沿对角线拖动鼠标选中一组单元格）。
4. 在“插入”菜单上，选择“名称”，然后单击“定义”。所有工作簿的名称和单元格区域都在此对话框中定义。
5. 确保选中的单元格区域正确显示在底部。为您的工作簿键入名称“MYBOOK”，然后选择“添加”。无论何时改变 MYBOOK 时，请确保在“定义名称”窗口底部的“引用位置”文本框中显示了正确的单元格区域。仅仅在新选中一组单元格后选择 MYBOOK，不会更新单元格区域。
6. 在名称显示在工作簿列表后，单击“确定”按钮。保存电子表格。
7. 关闭 Excel，去除对文件的锁定，以便 ASP 网页可以对其进行访问。

在第 3 课的示例中，将在连接字符串中指定提供程序的名称，以映射到特定的 ADO DLL。在本示例中，将使用一个驱动程序名称，使 ASP 使用此驱动程序的默认提供程序。

将下列代码复制并粘贴到文本编辑器中，将文件保存在 x:\Inetpub\Wwwroot\Tutorial 目录中，文件名为“ViewExcel.asp”。在浏览器地址栏中键入 http://localhost/Tutorial/ViewExcel.asp 查看此示例。

`

<%@ Language=VBScript %>
<html>
<head>
<title>在网页中显示 Excel 电子表格</title>
</head>
<body>
<font face="宋体">
<h2>在网页中显示 Excel 电子表格</h2>
<%
'创建连接字符串，创建一个 Connection 对象示例，
'然后连接到数据库。
strDriver = "Driver={Microsoft Excel Driver (*.xls)};DBQ=C:\Inetpub\Wwwroot\Tutorial\MyExcel.xls;"
Set objConn = Server.CreateObject("ADODB.Connection")
objConn.Open strDriver
'使用已保存的工作簿名称从 Excel 电子表格中选择记录。
strSELECT = "SELECT * from `MYBOOK`"
'创建一个 ADO Recordset 对象示例，并将其连接到 objConn。
Set objRS = Server.CreateObject("ADODB.Recordset")
objRS.Open strSELECT, objConn
'使用 GetString 方法打印表中的单元格和行。
Response.Write "<H4>使用 GetString 方法将 Excel 数据取入一个字符串</H4>"
Response.Write "<table border=1 ><tr><td>"
Response.Write objRS.GetString (, , "</td><td><font face=&quot;MS Gothic&quot;>", "</font></td></tr><tr><td>", NBSPACE)
Response.Write "</td></tr></table>"
'移动到第一条记录。
objRS.MoveFirst
'使用 ViewGB.asp 方法打印表中的单元格和行。
Response.Write "<H4>使用 MoveNext 方法获取 Excel 数据 </H4>"
'使用相应方法和属性打印输出 Recordset 对象的
'字段名称和属性
Response.Write "<table border=1 ><tr>"
'对于当前行中的每一列...
For i = 0 to (objRS.Fields.Count - 1)
' 输出字段名称。
Response.Write "<td><font face=&quot;MS Gothic&quot;><B>" & objRS(i).Name & "</B></font></td>"
Next
'如果还没有到达记录集的尾部...
While Not objRS.EOF
Response.Write "</tr><tr>"
'对于当前行中的每一列...
For i = 0 to (objRS.Fields.Count - 1)
' 输出字段中的数据。
%><td><font face="宋体"><%=objRS(i)%></font></td><%
Next
'移动到下一行。
objRS.MoveNext
Wend
Response.Write "</tr></table>"
'关闭连接。
objConn.Close
%>
</font>
</body>
</html>

`

在浏览器中，您应看到下列结果：

## 在网页中显示 Excel 电子表格

#### 使用 GetString 方法将 Excel 数据取入一个字符串

A2 | B2 | C2
A3 | B3 | C3

#### 使用 MoveNext 方法获取 Excel 数据

A1 | B1 | C1
A2 | B2 | C2
A3 | B3 | C3

## 下一单元：在 ASP 网页中使用 COM 组件

© 1997-2001 Microsoft Corporation。 保留所有权利。