3. 附录
3.1. 使用 Visual Studio.net 在 XP 家庭版上构建 Web 项目
Visual Studio.net 支持构建多种类型的项目:

要构建 Web 应用程序项目,通常选择 [Application Web ASP.NET] 类型。此类项目需要本地或远程的 IIS Web 服务器。 若在 Windows 系统上工作,该服务器并不存在且无法安装。因此无法创建 XP 类型的项目。
只要接受一些轻微的不便,就可以绕过这一障碍。只需:
- 使用 Cassini Web 服务器代替 IIS 服务器。该服务器可在微软官网上免费获取。
- 使用 [Bibliothèque de classes] 项目代替 [Application Web ASP.NET] 项目
让我们创建一个简单的项目来演示具体操作步骤。
- 创建一个名为 [Bibliothèque de classes] 的项目
![]() | ![]() |
- 删除 [Class1.vb]

- 向项目中添加一个新元素,类型为 [Fichier texte],并将其命名为 [demo.aspx]:
![]() | ![]() |
- 文件 [demo.aspx] 被识别为网页,并关联了一个页面编辑器。该编辑器包含两个面板:
- [design] 用于图形化构建页面
- [HTML]:用于访问网页代码

- 执行 [Affichage/Code] 以显示页面的代码部分 VB。没有任何反应。无法访问页面的代码 VB。
- 进入面板 [HTML],并输入将页面 [demo.aspx] 与代码 [demo.aspx.vb] 关联的代码:

- 通过 [Affichage code - F7] 查询该页面关联的校验码。得到文件 [demo.aspx.vb]:

- 页面 [demo.aspx] 现已被识别为网页 [.aspx],并关联了代码 [.aspx.vb]。
- 让我们回到 [demo.aspx] 的 [Design] 面板,并绘制以下页面:

该页面包含文本以及一个标识符为 [lblHeure] 的 [Label] 类型服务器组件。
- 进入 [HTML] 面板。其中包含以下代码:
<%@ Page codebehind="demo.aspx.vb" inherits="demo.demo" autoeventwireup="false" Language="vb" %>
Démo ASPX, il est
<asp:Label id="lblHeure" runat="server"></asp:Label>
从语法角度来看,该代码尚不完整 HTML。让我们将其补全:
<%@ Page codebehind="demo.aspx.vb" inherits="demo.demo" autoeventwireup="false" Language="vb" %>
<html>
<head>
<title>démo ASPX</title></head>
<body>
Démo ASPX, il est
<asp:Label id="lblHeure" runat="server"></asp:Label>
</body>
</html>
- 现在进入代码 [demo.aspx.vb],在其中编写控制代码,该代码将把时间写入组件 [lblHeure]。我们注意到,代码辅助工具 Intellisense 无法识别该组件。
- 先保存并关闭 [demo.aspx] 和 [demo.aspx.vb],然后重新打开它们。 转到代码 [demo.aspx.vb]。这次,Intellisense 在代码 [demo.aspx.vb] 中成功识别了 [demo.aspx] 中的组件 [lblHeure]。完成代码:

- 通过 [Générer/Générer demo] 生成项目。如果生成过程顺利,则项目中的 [bin] 文件夹内会生成 DLL:

- 现在可以进行测试了。我们将 Cassini 服务器(详见下文)配置如下:

Cassini 快捷方式的目标定义如下:
"E:\Program Files\Microsoft ASP.NET Web Matrix\v0.6.812\WebServer.exe" /path:"D:\temp\07-04-05\demo" /vpath:"/demo"
可执行文件的路径 | |
Visual Studio Web 项目文件夹路径 | |
关联的虚拟路径 |
- 启动 Cassini。其图标将显示在任务栏中。右键单击该图标,选择选项 [Show details] 以验证 Web 服务器的配置是否正确:

- 使用浏览器访问我们构建的页面,请求 URL [http://localhost/demo/demo.aspx]。我们将获得以下结果:

我们已成功在 Visual Studio 中创建了一个 Web 应用程序,使用的是:
- [bibliothèque de classes] 类型的项目
- Cassini Web 服务器
现在,我们已经掌握了在未安装IIS服务器的计算机上构建Web应用程序的方法,例如Windows XP家庭版系统。
3.2. 在哪里可以找到 Cassini Web服务器?
若要使用微软的 .NET 平台,可以使用 Cassini Web 服务器。 该服务器可通过名为 [WebMatrix] 的产品获取,这是一款基于 .NET 平台的免费 Web 开发环境,可在 URL 上使用:

请仔细遵循该产品的安装步骤:
- 下载并安装 .NET 平台(2004年3月版 1.1)
- 下载并安装 WebMatrix
- 下载并安装 MSDE(Microsoft Data Engine),该版本是 SQL Server 的精简版。
安装完成后,[WebMatrix] 产品将出现在已安装的程序中:

[ASP.NET] Web Matrix 链接将启动 IDE 开发版 ASP.NET:

链接 [Class Browser] 启动 .NET 类浏览器工具:

为测试安装,请运行 [WebMatrix]:
![]() |
首次启动时,[WebMatrix] 会询问新 projet.C 的属性,这是其默认配置。我们可以将其配置为启动时不显示此对话框。此时可通过选项 [File/New File] 实现。 [WebMatrix] 用于为各种 Web 应用程序构建模板。在上文中,我们通过 (1) 指定要构建一个名为 [ASP.ET Page] 的 Web 页面应用程序。通过 (2),我们指定了该 Web 页面的存放目录。 在 (3) 中,我们指定了页面的名称。该名称必须带有 .aspx 后缀。最后在 (4) 中,我们指定要使用 VB.NET 语言进行开发,此外 [WebMatrix] 还支持 C# 和 J# 语言。 设置完成后,[WebMatrix]将显示[demo1.aspx]文件的编辑页面。我们在其中输入以下代码:

- [Design] 选项卡可用于“设计”要构建的网页。其操作方式与用于构建 Windows 应用程序的 IDE 类似。
- 在 [Design] 中对网页进行的图形设计,将在 [HTML] 选项卡中生成 HTML 代码
- 网页可能包含会触发事件的控件,例如按钮,需要对这些事件做出响应。这些事件将由 VB.NET 代码处理,该代码将放置在 [Code] 选项卡中
- 最终,文件 demo1.aspx 是一个混合了代码 HTML 和代码 VB.NET 的文本文件,它是基于在 [Design] 中完成的图形设计, 以及在 [HTML] 中手动添加的 HTML 代码,以及放置在 [Code] 中的 VB.NET 代码。 完整的文件可在 [All] 选项卡中查看。
- 一位经验丰富的ASP.ET开发者可以直接使用文本编辑器创建demo1.aspx文件,而无需借助任何IDE工具。
我们选择 [All] 选项,可以看到 [WebMatrix] 已经生成了代码:
<%@ Page Language="VB" %>
<script runat="server">
' 在此处插入页面代码
'
</script>
<html>
<head>
</head>
<body>
<form runat="server">
<!-- 在此处插入内容 -->
</form>
</body>
</html>
我们在此不打算解释这段代码。我们将它转换如下:
<html>
<head>
<title>Démo asp.net </title>
</head>
<body>
Il est <% =Date.Now.ToString("hh:mm:ss") %>
</body>
</html>
上述代码是 HTML 与 VB.NET 代码的混合体。该代码被放置在 <% ... %> 标签内。要执行此代码,我们使用 [View/Start] 选项。 如果 Cassini Web 服务器尚未启动,[WebMatrix] 将启动该服务器

我们可以接受此对话框中提供的默认值,并选择选项 [Start]。 此时 Web 服务器已处于活动状态。[WebMatrix] 将启动所在机器的默认浏览器,并请求 URL http://localhost:8080/demo1.aspx:

也可以在 [WebMatrix] 之外使用 Cassini 服务器。服务器的可执行文件位于 <WebMatrix>\<version>\WebServer.exe,其中 <WebMatrix> 是 [WebMatrix] 的安装目录,<version> 是其版本号:

打开一个 DOS 窗口,并进入 Cassini 服务器的文件夹:
E:\Program Files\Microsoft ASP.NET Web Matrix\v0.6.812>dir
...
29/05/2003 11:00 53 248 WebServer.exe
...
不带任何参数运行 [WebServer.exe]:
此时会弹出一个帮助窗口:

[WebServer] 应用程序(也称为 Cassini Web 服务器)支持三个参数:
- /port:Web服务的端口号。可以是任意值。默认值为80
- /path:磁盘上某个文件夹的物理路径
- /vpath:与上述物理文件夹关联的虚拟文件夹。请注意,其语法并非 /path=路径,而是 /vpath:路径,这与上文帮助面板中的示例 [Example] 所示不同。
将文件 [demo1.aspx] 放置在以下文件夹中:

将物理文件夹 [d:\data\devel\webmatrix] 与虚拟文件夹 [/webmatrix] 关联。Web 服务器可通过以下方式启动:
E:\Program Files\Microsoft ASP.NET Web Matrix\v0.6.812>webserver /port:100 /path:"d:\data\devel\webmatrix" /vpath:"/webmatrix"
此时 Cassini 服务器处于活动状态,其图标会出现在任务栏中。双击该图标:

即可查看服务器的启动参数。 此外,还可以停止 [Stop] 或重启 [Restart] 网页服务器。若点击 [Root URL] 链接,浏览器中将显示服务器网页树的根目录:

点击链接 [demos]:

接着点击链接 [demo1.aspx]:

因此我们可以看到,如果物理文件夹 P=[d:\data\devel\webmatrix] 已与虚拟文件夹 V=[/webmatrix] 关联,且服务器运行在 100 端口上, 那么物理上位于 [P\demos] 中的网页 [demo1.aspx] 将可通过 URL [http://localhost:100/V/demos/demo1.aspx] 在本地访问。
为了避免必须通过 DOS 窗口来启动 Cassini 服务器,可以创建一个指向服务器可执行文件的快捷方式,其属性设置如下:

"C:\Program Files\Microsoft ASP.NET Web Matrix\v0.6.812\WebServer.exe" /port:80 /path:"D:\data\serge\travail\2004-2005\aspnet\webarticles-010405\version3\web" /vpath:"/webarticles" | |
"C:\Program Files\Microsoft ASP.NET Web Matrix\v0.6.812" |
3.3. 在哪里可以找到 Spring?
Spring 的主站点是 [http://www.springframework.org/]。这是 Java 版本的站点。正在开发中的 .NET 版本(2005 年 4 月)位于 [http://www.springframework.net/] 网址。

下载地址为 [SourceForge]:

下载上述压缩包后,请解压:

本文仅使用了文件夹 [bin] 中的内容:

在使用Spring的Visual Studio项目中,必须系统地完成两项操作:
- 将上述文件放入项目的 [bin] 文件夹中
- 向项目中添加对程序集 [Spring.Core.dll] 的引用
3.4. 在哪里可以找到 Nunit?
Nunit 的官方网站是 [http://www.nunit.org/]。2005 年 4 月可用的版本是 2.2.0:

下载此版本并进行安装。安装过程会创建一个文件夹,其中包含图形化测试版本:
真正有用的内容位于文件夹 [bin] 中:


上图中的箭头指向图形化测试工具。安装过程还向 Visual Studio 的程序集库中添加了新项,我们现在就来了解这些内容。
创建以下 Visual Studio 项目:

被测试的类位于 [Personne.vb] 中:
Public Class Personne
' 私有字段
Private _nom As String
Private _age As Integer
' 默认构造函数
Public Sub New()
End Sub
' 与私有字段关联的属性
Public Property nom() As String
Get
Return _nom
End Get
Set(ByVal Value As String)
_nom = Value
End Set
End Property
Public Property age() As Integer
Get
Return _age
End Get
Set(ByVal Value As Integer)
_age = Value
End Set
End Property
' 标识符字符串
Public Overrides Function tostring() As String
Return String.Format("[{0},{1}]", nom, age)
End Function
' init 方法
Public Sub init()
Console.WriteLine("init personne {0}", Me.ToString)
End Sub
' close 方法
Public Sub close()
Console.WriteLine("destroy personne {0}", Me.ToString)
End Sub
End Class
测试类位于 [NunitTestPersonne-1.vb] 中:
Imports System
Imports NUnit.Framework
<TestFixture()> _
Public Class NunitTestPersonne
' 被测试对象
Private personne1 As Personne
<SetUp()> _
Public Sub init()
' 创建 Personne 实例
personne1 = New Personne
' 日志
Console.WriteLine("setup test")
End Sub
<Test()> _
Public Sub demo()
' 屏幕日志
Console.WriteLine("début test")
' 初始化person1
With personne1
.nom = "paul"
.age = 10
End With
' 测试
Assert.AreEqual("paul", personne1.nom)
Assert.AreEqual(10, personne1.age)
' 屏幕日志
Console.WriteLine("fin test")
End Sub
<TearDown()> _
Public Sub destroy()
' 跟踪
Console.WriteLine("teardown test")
End Sub
End Class
有几点需要注意:
- 方法带有诸如 <Setup()>、<TearDown()> 等属性
- 要使这些属性被识别,必须满足以下条件:
- 项目必须引用 [nunit.framework.dll] 程序集
- 测试类导入命名空间 [NUnit.Framework]
在解决方案资源管理器中右键单击 [References] 即可添加引用:
![]() | ![]() |

如果 [Nunit] 的安装成功,则 [nunit.framework.dll] 应出现在所提供的列表中。只需双击该程序集即可将其添加到项目中:

完成上述操作后,测试类 [NunitTestPersonne] 必须导入命名空间 [NUnit.Framework]:
此时,测试类 [NunitTestPersonne] 的属性应被识别。
- <Test()> 属性指定要测试的方法
- <Setup()> 属性表示在每个被测方法之前执行的方法
- <TearDown()> 属性表示在每次测试方法之后要执行的方法
- 方法 Assert.AreEqual 用于测试两个 entités.Il 是否相等,此外还有许多其他 Assert.xx 类型的方法。
- 实用程序 NUnit 会在任何 [Assert] 方法失败时立即停止被测试方法的执行并显示错误信息。否则,它将显示成功信息。
让我们配置项目以生成一个 DLL:

生成的 DLL 将命名为 [nunit-demos-1.dll],并默认放置在项目的 [bin] 文件夹中。生成我们的项目。我们在 [bin] 文件夹中得到:

现在启动图形化测试工具 Nunit。请注意,该工具位于 <Nunit>\bin 目录下,名称为 [nunit-gui.exe]。<Nunit> 代表 [Nunit] 的安装目录。界面如下所示:

使用菜单选项 [File/Open] 加载我们项目中的 DLL 和 [nunit-demos-1.dll]:

[Nunit] 能够自动检测加载的 DLL 文件中包含的测试类。 在此,它找到了类 [NunitTestPersonne]。随后,它会显示该类中所有带有 <Test()> 属性的方法。通过按钮 [Run],可以对所选对象启动测试。 如果该对象是类 [NunitTestPersonne],则会测试所有显示的方法。可以通过选择特定方法并调用 [Run] 来请求测试该方法。现在让我们请求执行该类:

方法测试通过时,左侧窗口中该方法旁边会显示一个绿色圆点。测试失败时则显示红色圆点。
右侧的 [Console.Out] 窗口显示了被测试方法生成的屏幕输出。在此,我们希望跟踪一个测试的执行过程:
- 第 1 行表明属性方法 <Setup()> 在测试前被执行
- 第 2-3 行由被测试的方法 [demo] 生成(参见上文代码)
- 第 4 行显示属性方法 <TearDown()> 在测试后执行
3.5. 在哪里可以找到 Firebird 的 SGBD ?
Firebird 的主网站是 [http://firebird.sourceforge.net/]。下载页面提供以下链接(2005年4月):

我们将下载以下文件:
适用于 Windows 的 SGBD | |
一个用于应用程序的类库 NET,它允许在不通过驱动程序 SGBD 的情况下访问 ODBC。 | |
Firebird 的 ODBC 驱动程序 |
安装这些组件。SGBD 安装在内容类似于以下结构的文件夹中:

二进制文件位于 [bin] 文件夹中:

用于启动/停止 SGBD | |
用于管理数据库的命令行客户端 |
请注意,默认情况下,SGBD的管理员名为[SYSDBA],密码为[masterkey]。[Démarrer]中已安装以下菜单:

选项 [Firebird Guardian] 可用于启动/停止 SGBD。启动后,SGBD 的图标会保留在 Windows 任务栏中:
![]() |
若要使用命令行客户端 [isql.exe] 创建和操作 Firebird 数据库,请务必阅读产品附带文档(位于 [doc] 文件夹中)。更快捷的操作方式是使用图形化客户端,例如下文所述的 IB-Expert。
3.6. 在哪里可以找到 IB- Expert?
Firebird 的主网站是 [http://www.ibexpert.com/]。下载页面提供了以下链接:

请选择免费版本 [Personal Edition]。下载并安装后,将生成如下所示的文件夹:

可执行文件为 [ibexpert.exe]。通常在 [Démarrer] 菜单中会有一个快捷方式:

启动后,IBExpert将显示以下窗口:

使用 [Database/Create Database] 选项创建数据库:

可能是 [local] 或 [remote]。这里我们的服务器与 [IBExpert] 位于同一台机器上。因此我们选择 [local] | |
使用下拉列表中类似 [dossier] 的按钮来指定数据库文件。Firebird 将整个数据库封装在一个文件中,这是其优势之一。只需复制该文件即可将数据库从一台机器迁移到另一台。后缀 [.gdb] 会自动添加。 | |
SYSDBA 是当前 Firebird 发行版的默认管理员 | |
masterkey 是当前 Firebird 发行版中管理员 SYSDBA 的密码 | |
要使用的方言为 SQL | |
如果勾选此复选框,IBExpert将在数据库创建完成后显示一个指向该数据库的链接 |
如果点击创建按钮 [OK] 后,您会收到以下警告:

说明您尚未启动 Firebird。请启动它。此时会弹出一个新窗口:

[IBExpert] 能够处理各种源自 Interbase 的 SGBD 文件。请使用您已安装的 Firebird 版本 |
![]()
当 [Register] 确认此新窗口后,将得到以下结果:

要访问创建的数据库,只需双击其链接。IBExpert 随后将显示一个树形结构,用于访问数据库的属性:

现在创建一张表。右键单击 [Tables],选择 [New Table] 选项。此时将弹出表属性定义窗口:
![]() |
首先,通过输入框 [1] 将表命名为 [ARTICLES]:
![]() |
使用输入框 [2] 定义主键 [ID]:
![]() |
双击字段的 [PK](主键)区域,即可将该字段设为主键。使用 [3] 按钮添加字段:

在“编译”定义之前,表不会被创建。 使用上方的 [Compile] 按钮来完成表的定义。IBExpert 会准备生成表的 SQL 查询,并请求确认:

有趣的是,IBExpert 会显示其已执行的 SQL 查询。 这既有助于学习 SQL 语言,也有助于了解可能使用的专有方言 SQL。 按钮 [Commit] 用于确认当前事务,[Rollback] 用于取消该事务。 此处通过 [Commit] 进行确认。操作完成后,IBExpert 将创建的表添加到数据库的树形结构中:

双击该表即可查看其属性:

通过面板 [Constraints],我们可以为该表添加新的完整性约束。让我们打开它:

我们可以看到之前创建的主键约束。还可以添加其他约束:
- 外键 [Foreign Keys]
- 字段完整性约束 [Checks]
- 字段唯一性约束 [Uniques]
请注意:
- 字段 [ID, PRIX, STOCKACTUEL, STOKMINIMUM] 的值必须大于 0
- 字段 [NOM] 必须不为空且唯一
打开[Checks]面板,在约束定义区域中右键单击以添加新约束:

定义所需的约束条件:

请注意,上文中的约束 [NOM<>''] 使用的是两个单引号,而非双引号。点击上方的 [Compile] 按钮编译这些约束:

同样,IBExpert 通过列出已执行的 SQL 查询,再次展示了其教学功能。现在我们转到 [Constraints/Uniques] 面板,指定名称必须是唯一的:

定义约束条件:

编译该约束。完成后,打开表 [ARTICLES] 的面板 [DDL]:

该面板会生成包含所有约束条件的表生成代码 SQL。我们可以将此代码保存到脚本中,以便日后重新执行:
SET SQL DIALECT 3;
SET NAMES NONE;
CREATE TABLE ARTICLES (
ID INTEGER NOT NULL,
NOM VARCHAR(20) NOT NULL,
PRIX DOUBLE PRECISION NOT NULL,
STOCKACTUEL INTEGER NOT NULL,
STOCKMINIMUM INTEGER NOT NULL
);
ALTER TABLE ARTICLES ADD CONSTRAINT CHK_ID check (ID>0);
ALTER TABLE ARTICLES ADD CONSTRAINT CHK_PRIX check (PRIX>0);
ALTER TABLE ARTICLES ADD CONSTRAINT CHK_STOCKACTUEL check (STOCKACTUEL>0);
ALTER TABLE ARTICLES ADD CONSTRAINT CHK_STOCKMINIMUM check (STOCKMINIMUM>0);
ALTER TABLE ARTICLES ADD CONSTRAINT CHK_NOM check (NOM<>'');
ALTER TABLE ARTICLES ADD CONSTRAINT UNQ_NOM UNIQUE (NOM);
ALTER TABLE ARTICLES ADD CONSTRAINT PK_ARTICLES PRIMARY KEY (ID);
现在是时候向表 [ARTICLES] 中插入数据了。为此,请使用其面板 [Data]:

通过双击表中每行对应的输入字段即可输入数据。 点击按钮 [+] 可添加新行,点击按钮 [-] 可删除行。这些操作均在事务中进行,需通过按钮 [Commit Transaction] 进行提交。若未提交,数据将丢失。
IBExpert 允许通过选项 [Tools/SQL Editor] 或 [F12] 生成 SQL 查询。 此时可访问一个功能强大的 SQL 查询编辑器,用于执行查询。这些查询会被保存,因此可以回溯已执行的查询。以下是一个示例:

通过上方的 [Execute] 按钮执行 SQL 查询。结果如下:

我们的演示到此结束。IBExpert与Firebird的组合对于学习数据库而言非常出色。
3.7. 安装并使用 驱动程序ODBC用于[Firebird]
3.8. 安装驱动程序
[Firebird] 下载页面(第 3.5 节)中的 [firebird-odbc-provider] 链接可访问 ODBC 驱动程序。 安装完成后,它将出现在已安装的 ODBC 驱动程序列表中。
3.9. 创建 ODBC 源
- 运行工具 [Démarrer -> Paramètres -> Outil de configuration -> Outils d'administration -> Sources de données ODBC]:

- 将显示以下窗口:

- 在 [Add] 面板中添加一个新的系统数据源([System DSN] 面板),并将它与上一节中创建的 Firebird 数据库关联:

- 首先,我们需要指定要使用的驱动程序。在上图中,我们选择了Firebird的驱动程序,然后执行[Terminer]。此时,Firebird驱动程序向导将接管操作:

- 我们填写各个字段:

源文件名称 DSN - 可以是任意名称 | |
要使用的 Firebird 数据库名称 BD —— 使用 [Browse] 指定对应的 .gbd 文件 | |
用于连接数据库的用户名 | |
与该用户名关联的密码 |
[Test connection] 按钮用于验证我们提供的信息是否有效。使用前,请先运行 SGBD [Firebird]:

- 通过反复执行 [OK] 操作,直至 ODBC 向导验证通过
3.10. 测试源文件 ODBC
验证源文件是否正常运行有多种方法 ODBC。这里我们将使用 Excel:

- 使用上述选项 [Données -> Données externes -> Créer une requête]。此时将弹出数据源定义向导的第一个窗口。面板 [Bases de données] 列出了当前机器上已定义的数据源:

- 选择我们刚刚创建的源 ODBC [odbc-firebird-articles],并进入下一步:

- 此窗口列出了源 ODBC 中可用的表和列。我们选择整个表:

- 接着进行下一步,使用 [Suivant]:

- 此步骤允许我们筛选数据。此处我们不进行任何筛选,直接进入下一步:

- 此步骤允许我们对数据进行排序。我们不进行排序,直接进入下一步:

- 最后一步询问我们希望如何处理数据。在此,我们将数据导出到Excel:

- 此时,Excel会询问将提取的数据保存到何处。我们将数据保存到当前工作表的A1单元格开始的位置。随后,数据便被导入到Excel工作表中:

还有其他方法可以测试 ODBC 数据源的有效性。 例如,可以使用在URL [http://www.openoffice.org]上提供的免费套件OpenOffice。以下是一个使用文本OpenOffice的示例:
![]() | ![]() |
- OpenOffice 窗口左侧的图标可访问数据源。此时界面将切换,显示一个数据源管理区域:

- 已预定义了一个数据源,即 [Bibliography]。右键单击数据源区域,即可通过选项 [Gérer les sources de données] 创建一个新的数据源:

- [Gestion des sources de données] 向导可用于创建数据源。右键单击数据源区域,即可通过 [Nouvelle source de données] 选项创建一个新的数据源:

任意名称。此处采用了数据源名称 ODBC | |
OpenOffice 能够通过 BD、JDBC、ODBC 或直接(MySQL、Dbase 等)处理不同类型的 OpenOffice。 在本示例中,需选择 ODBC | |
输入字段右侧的按钮可让我们访问该机器的 ODBC 源列表。我们选择源 [odbc-firebird-articles] |
- 转到 [ODBC] 面板,在此处定义用于登录的用户身份:

源文件的所有者为 ODBC |
- 转到面板 [Tables]。系统会要求输入密码。此处的密码是 [masterkey]:

- 执行 [OK]。随后将显示源文件 ODBC 的表列表:

- 我们可以定义将在文档 [OpenOffice] 中显示的表格。这里我们选择表格 [ARTICLES],并生成 [OK]。数据源的定义已完成。它随后会出现在当前文档的数据源列表中:

- 我们可以使用鼠标将上方的表格 [ARTICLES] 拖拽到文本 [OpenOffice] 中:

3.11. ODBC Firebird 数据源的连接字符串
- 启动 Visual Studio 并显示服务器资源管理器 [Affichage/Explorateur de serveurs]:
![]() |
- 右键单击 [Connexion de données] 并选择 [Ajouter une connexion] 选项:

- 在 [Provider] 面板中,指定要使用源文件 ODBC(参见上文),然后切换到 [Connection] 面板:

在组合框中选择源 ODBC。刚刚创建的源应会显示出来。如有需要,可使用 [Refresh] 刷新 ODBC 的源列表。 | |
用于连接数据库的用户名 | |
与该用户名关联的密码 |
同样,通过按钮 [Test Connection] 可验证信息的有效性:

- 通过 [OK] 确认向导。此时,数据源将显示在 Visual Studio 的 [Explorateur de serveurs] 窗口中:

- 双击表 [ARTICLES],即可访问该表的数据:

- 如果右键单击链接 [Firebird Server D:\temp\... ] 并选择 [Propriétés] 选项,即可访问连接属性:

- 连接字符串 [ConnectString] 是一个值得了解的属性,因为代码 .NET 需要它来建立与数据库的连接。此处的连接字符串为:
Provider=MSDASQL.1;Persist Security Info=False;User ID=SYSDBA;Data Source=demo-odbc-firebird;Extended Properties="DSN=demo-odbc-firebird;Driver=Firebird/InterBase(r) driver;Dbname=D:\temp\07-04-05\firebird\DBARTICLES.GDB;CHARSET=NONE;UID=SYSDBA"
该连接字符串中的许多元素都有默认值。我们可以直接使用以下连接字符串:
至此,我们对 ODBC 驱动程序的介绍就结束了。
3.12. 在哪里可以找到 SGBD、 、MSDE?
MSDE 是微软 SGBD SQL 服务器的免费版本。可在 URL [http://www.microsoft.com/sql/msde/downloads/download.asp] 处找到:
![]() |
![]() | ![]() |
下载安装文件,然后双击下载的可执行文件安装 SGBD。此时会弹出一个窗口,要求选择安装目录。该标题容易引起误解。这是一个临时文件夹,安装完成后可以删除:
![]() | ![]() |
请仔细阅读文件 [ReadmeMSDE2000A.htm]。上述的安装程序是 [setup.exe]。它通过命令行启动,以便传入参数。主要参数如下:
描述 | |
| 指定要分配给管理员登录名“sa”的强密码。 |
| 定义实例名称。如果未指定 INSTANCENAME,安装程序将安装一个默认实例。 |
其他常用于自定义安装的参数包括:
描述 | |
| 指定实例是否接受来自其他计算机上运行的应用程序的网络连接。 默认情况下,或者如果您指定 DISABLENTWORKPROTOCOL=1,安装程序会将实例配置为拒绝网络连接。指定 DISABLENETWORKPROTOCOLS=0 以启用网络连接。 |
指定实例应以混合模式安装,即该实例支持 Windows 身份验证和 SQL 身份验证用于连接 | |
| 指定安装程序安装系统数据库、错误日志和安装脚本的文件夹。 为 chemin_dossier_données 指定的值必须以反斜杠 (\) 结尾。对于默认实例,安装程序会在指定的值后添加 MSSQL\。 对于命名实例,安装程序会添加 MSSQL$NomInstance\,其中 NomInstance 是通过参数 INSTANCENAME 指定的值。 安装程序将在指定位置创建三个文件夹:Data 文件夹、Log 文件夹和 Script 文件夹。 |
| 指定安装程序将 MSDE 2000 的可执行文件安装到的文件夹。 为 chemin_dossier_exécutables 指定的值必须以反斜杠 (\) 结尾。对于默认实例,安装程序会在指定的值后添加 MSSQL\Binn。 对于命名实例,安装程序会添加 MSSQL$NomInstance\Binn,其中 NomInstance 是通过参数 INSTANCENAME 指定的值。 |
阅读完上述安装建议后,我们进入安装文件已解压的文件夹,并执行以下 DOS 命令(在无网络环境下使用 SGBD):
- INSTANCENAME="MSDE140405" - 这将是我们 MSDE 实例的名称。可以安装多个实例。
- SECURITYMODE=SQL - 数据库管理系统将以混合身份验证模式运行。这样,我们就可以通过两种方式连接到 MSDE:
- 使用 Windows 管理员账户
- 使用 MSDE 账户——此时需要输入登录名和密码。这是在程序连接 SGBD 数据库时应采用的模式。
- SAPWD="azerty"——此处为 SGBD 用户账户的密码。用户 [sa] 拥有对 SGBD 的管理权限。
若要在网络中使用 SGBD,需执行以下命令:
安装程序非常简洁,且在无任何提示的情况下结束……不过可以发现,SGBD是通过[Menu Démarrer -> Panneau de configuration -> Ajouter et supprimer des programmes]选项安装的:
![]()
通常安装路径为 C:\Program Files\Microsoft SQL Server\MSSQL$nomInstance:
![]() | ![]() |
在安装目录下的 [LOG] 文件夹中,可以找到 SGBD 安装阶段的日志文件。其中包含一条重要信息:MSDE 实例的名称:
了解该名称非常重要,因为 SGBD 的所有客户端都需要它。如果没有这些日志,可以通过 MSDE 服务器(即 [machine_windows\nom_instance_MSDE])来获取该名称。该机器的名称可在多个位置找到。例如:
- 在桌面上右键点击 [poste de travail],选择 [propriétés] 选项,然后进入 [Nom de l'ordinateur] 面板:

目前尚不清楚如何启动服务器 MSDE。通常会在 [Démarrer/Démarrage] 中放置一个快捷方式。

查看该快捷方式的属性,发现其目标路径如下:
在文件夹 [ C:\Program Files\Microsoft SQL Server] 中,存在以下子文件夹:

- MSSQL$MSDE140405 是我们刚刚安装的 MSDE 实例的文件夹。
- MSSQL 是先前实例 MSDE 的文件夹。由于它没有名称,因此我们称其为默认实例。
- 文件夹 [80] 是已安装的各个 MSDE 实例共用的文件夹。 启动 MSDE 实例的快捷方式的目标 [sqlmangr.exe] 位于文件夹 [ 80\Tools\Binn] 中。
通过 [Démarrer -> Programmes -> Démarrage] 的快捷方式启动 MSDE。除了状态栏中出现了一个图标外,几乎没有任何反应: | 双击该图标: ![]() |
此处提供的 MSDE 服务器是本机上的默认服务器 [PORTABLE1_TAHE]。需要提醒的是, 我们安装的 MSDE 服务器名为 [PORTABLE1_TAHE\MSDE140405]。我们将 服务器名称: ![]() | 如果一切顺利,[MSDE140405]实例应已启动: ![]() |
现在可以进行初步验证。 在包含 [sqlmangr.exe] 的同一文件夹中,有一个名为 [osql.exe] 的控制台客户端,它允许连接到 MSDE 服务器并执行 SQL 命令。 在安装过程中,我们为服务器 MSDE 的管理员 [sa] 设置了密码 [azerty]。 我们将通过控制台客户端连接到新安装的服务器。若执行命令 [osql -?],将显示可用的参数列表:
C:\Program Files\Microsoft SQL Server\80\Tools\Binn>osql -?
utilisation : osql
[-U ID de connexion]
[-P mot de passe]
[-S serveur]
[-H nom de l'hôte]
[-E connexion approuvée]
[-d utiliser le nom de la base de données]
[-l limite du temps de connexion]
[-t limite du temps de requête]
[-h en-têtes]
[-s séparateur de colonnes]
[-w largeur de colonne]
[-a taille du paquet]
[-e entrée d'écho]
[-I Activer les identificateurs marqués]
[-L liste des serveurs]
[-c fin de cmd] [-D nom ODBC DSN]
[-q "requête cmdline"]
[-Q "requête cmdline" et quitter]
[-n supprimer la numérotation]
[-m niveau d'erreur]
[-r msgs vers stderr]
[-V severitylevel]
[-i fichier d'entrée]
[-o fichier de sortie]
[-p imprimer les statistiques] [-b abandon du lot d'instruction après erreur]
[-X[1] désactive les commandes [et quitte avec un avertissement]]
[-O utiliser le comportement Old ISQL désactive les éléments suivants]
<EOF> traitement par lot d'instructions
Mise à l'échelle automatique de la largeur de la console
Messages larges
niveau d'erreur par défaut de -1 au lieu de 1
[-? description de la syntaxe]
按照上述说明启动服务器 [MSDE140405],然后在 DOS 窗口中,使用 [osql] 以 [sa, azerty] 的身份连接到服务器 [portable1_tahe\msde140405]:
C:\Program Files\Microsoft SQL Server\80\Tools\Binn>OSQL.EXE -U sa -S portable1_tahe\msde140405 -P azerty
1>
提示符 [1>] 表示 [osql] 正在等待命令。 我们已成功连接。要正确使用 [osql],需查阅 MSDE 的文档。该文档提供多种格式(pdf、htmlhelp 等)。此文档内容非常庞大。 通常建议使用图形化客户端来操作 MSDE 数据库。稍后将介绍相关操作。要退出 [osql],请使用命令 [exit]:
接下来我们将了解如何在新安装的 MSDE 服务器中创建数据库。在此之前,我们将简要介绍一个名为 [MSDE Manager] 的工具,该工具可用于修改 MSDE 服务器的身份验证模式。 实际上,如果按照默认安装选项安装此类服务器,服务器的身份验证模式将采用[authentification windows]类型。此类身份验证仅允许在Windows机器上已注册的用户(可能通过域)进行访问。 对于希望连接数据库以利用其内容的 VB.NET 程序而言,这种模式并不实用。对于通过 JDBC 驱动程序访问 SGBD 的 Java 应用程序来说,情况则更为棘手。 因此,建议采用混合身份验证,该方式在原有身份验证基础上,还支持在 SGBD 中声明的(用户名、密码)组合。[MSDE Manager] 工具可用于执行此操作。
3.13. 在哪里可以找到 MSDE Manager?
[MSDE Manager]是SGBD和MSDE的管理工具。可在URL和[http://www.valesoftware.com/]中找到。
我们可通过上述链接下载免费版本:


试用版有效期较短。这正合我们心意,因为我们仅将其用于一次非常具体的操作。我们下载并安装该产品。桌面会生成一个快捷方式。我们通过它启动 MSDE Manager。经过前几个窗口后,我们看到如下界面:

- 启动 MSDE140405 服务器
- 您必须以管理员身份登录该 Windows 机器
- 右键单击链接 [SQL Server Group],并选择选项 [New SQL Server Registration]:


将显示以下属性页面:
![]() |
portable1_tahe\msde140405 - 您要连接的 MSDE 实例的名称 | |
Windows 身份验证 - 此模式始终可用,允许 Windows 计算机的管理员连接到服务器 MSDE | |
选择显示的唯一服务器组 [SQL Server Group] |
单击后,将显示服务器属性树:

我们可以开始创建数据库。但我们不会这样做,因为我们将使用另一款产品,即之前研究过的 IBExpert 产品的克隆版本。 我们只需更改 MSDE 的身份验证模式。右键单击上方的 MSDE140405 服务器,并选择 [Design] 选项:

此时将显示以下信息窗口:

[General]面板显示了当前连接的MSDE服务器的信息。我们需要关注的是[Security]页面:

在此需确认,MSDE的认证模式确实为[SQL Server and Windows]。这样,我们就可以通过两种方式连接到MSDE:
- 使用 Windows 管理员账户——本文中采用的就是这种方式
- 使用 MSDE 账户——此时系统会要求输入用户名和密码。若程序需连接 SGBD 数据库,应采用此模式。
确认选择后,退出 MSDE Manager。此后将不再需要该程序。 要创建 MSDE 数据库,我们将使用另一款工具:EMS MS SQL Manager。
3.14. 在哪里可以找到 EMS、 、MS 和 SQL Manager?
EMS MS SQL Manager 是一款图形化工具,用于操作 SGBD Microsoft SQL Server 以及 MSDE。它与前文所述的IB-Expert工具非常相似。该工具可从URL [http://sqlmanager.net/](2005年4月)获取:

该网站为众多 SGBD 提供了管理工具。请点击以下链接:

上文我们选择了该产品的精简版。下载并安装它。您将获得一个类似于以下结构的文件夹:

可执行文件为 [MsManager.exe]。通常在菜单中会提供一个快捷方式 [Démarrer]:

启动后,MS SQL Manager 将显示以下窗口:

首先,使用选项 [Database/Register Host] 注册我们要工作的服务器 MSDE:
![]() |
注释:
- 步骤 1 - 如前所述,MSDE 支持两种身份验证模式:Windows 和 SQL Server。在 [windows] 模式下,使用的是 Windows 机器上的账户。 在 [SQL Server] 模式下,使用的是 SGBD 的账户。 [SQL Server] 可在 [Windows] 模式或混合模式 [Windows, SQL Server] 下运行。 [Windows] 身份验证模式始终存在。而混合身份验证模式则并非始终处于激活状态。我们已了解如何通过 MSDE Manager 将其激活。上文中的登录操作是使用管理员账户进行的。
- 步骤 2 - 认证成功后,系统将显示 MSDE 的默认数据库。上图中,所有数据库均已被选中。
![]() |
注释:
- 步骤 3:可选择所选数据库的管理选项。此处保留了默认提供的选项。
- 步骤 4:点击 [Register] 按钮,将服务器 MSDE 保存
随后,服务器 MSDE 便会出现在数据库浏览器中:

使用 [Database/Create Database] 选项创建数据库:
![]() |
步骤 2:
当此信息页面出现时,表示数据库 [dbarticles] 已创建。可通过 [Test Connect] 按钮进行确认。在 [Database alias] 字段中可输入任意内容。此处我们输入:
- 数据库名称
- 数据库所在的服务器名称 MSDE
- 该数据库的所有者用户 [admarticles] 及其密码 [mdparticles]。该用户尚未创建,但即将创建。
步骤 3:
- 点击按钮 [Register],我们将新数据库保存至 [MS SQL Server ]。保存后,数据库 [admarticles] 会出现在数据库列表中。双击该数据库即可显示其属性树。
![]() | ![]() |
创建一个新的登录账号,该账号将作为数据库 [admarticles] 的管理员。
- 选择选项 [Tools/Login manager]:

- 可以看到已有两个登录账号被定义:
- [BUILTIN\Administrateurs]:该登录名使用Windows身份验证。它代表托管MSDE服务器的Windows机器上的管理员
- sa:该登录名使用SQL身份验证。默认情况下,它是MSDE服务器的管理员。 需要提醒的是,根据 SGBD 和 MSDE 的安装配置,其密码为 [azerty]。
- 右键单击登录区域,添加一个新登录账号:
![]() |
- 此时将弹出一个输入表单,我们在其中定义新登录账号的属性:

- 登录名:adarticles
- 密码:mdparticles
- 点击按钮 [OK] 后,MS Manager 会向我们展示即将执行的查询 SQL:

上文展示的SQL语言是Transact-SQL,即MSDE中的SQL语言。我们要求[OK]执行此代码
- 新登录名已插入登录名列表:

- 在数据库 [dbarticles] 的属性窗口中,右键单击 [users] 以创建一个对数据库 [dbarticles] 具有权限的用户:

- 随后将显示以下窗口:

- 在 [Login] 下拉列表中显示现有登录账号列表。选择登录账号 [admarticles]。
- 在 [Name] 中输入用户名。 同一登录名可关联多个用户。因此,在 MSDE 中,创建用户需先创建登录名。[User] 面板将变为如下所示:

- 现在我们转到面板 [Member Of],该面板将用于定义用户的权限:

- 我平时并不常使用 MSDE,也不清楚左侧窗口中列出的各个角色的确切含义。 角色[db_owner]颇具吸引力(owner=所有者)。因此,我们为用户[admarticles]选择该角色:

- 我们通过上方的 [Compile] 按钮确认选择。提交执行的 SQL 查询如下:

- 我们通过 [OK] 进行编译。现在,我们拥有了数据库用户 [dbarticles]:

- 现在创建一个表。右键单击 [Tables],选择 [New Table] 选项。此时将显示表属性定义窗口:

- 首先,在输入框 [Table Name] 中为该表命名 [ARTICLES]。然后转到面板 [Fields]:

- 定义以下字段:

只要尚未“编译”我们的定义,表就不会被创建。 请使用上方的 [Compile] 按钮来完成表的定义。[MS SQL Manager] 会准备生成表的查询 SQL 并请求确认:

有趣的是,[MS SQL Manager] 会显示其已执行的 SQL 查询。这有助于学习 Transact-SQL 语言。 按钮 [Commit] 用于提交当前事务,[Rollback] 用于取消事务。 此处通过 [Commit] 确认该操作。完成此操作后,[MS SQL Manager] 将创建的表添加到数据库树结构中:

双击该表即可查看其属性:

通过面板 [Checks],我们可以为该表添加新的完整性约束。对于表 [ARTICLES],我们将创建以下约束:
- 字段 [ID, PRIX, STOCKACTUEL, STOKMINIMUM] 的值必须 >=0
- 字段 [NOM] 必须不为空
在 [Checks] 面板中,右键单击其空白区域以添加新的约束 [New check]:

- 约束编辑表如下所示:

Name:约束名称
表:约束作用的表
定义:约束表达式
通过上方的 [Compile] 按钮可编译该约束。
- 再次点击 [MS SQL Manager] 显示已执行的 SQL 命令:

- 通过按钮 [Commit](未显示)进行确认。若返回表 [ARTICLES] 的面板 [Checks],将显示新的约束:

- 我们同样定义其他约束,最终得到以下列表:

完成上述操作后,打开表 [ARTICLES] 中的面板 [DDL]:

该面板提供了生成该表及其所有约束条件的 Transact-SQL 代码。我们可以将此代码保存到脚本中,以便日后重新执行:
CREATE TABLE [ARTICLES] (
[id] int NOT NULL,
[nom] varchar(20) COLLATE French_CI_AS NOT NULL,
[prix] float(53) NOT NULL,
[stockactuel] int NOT NULL,
[stockminimum] int NOT NULL,
CONSTRAINT [ARTICLES_uq] UNIQUE ([nom]),
PRIMARY KEY ([id]),
CONSTRAINT [ARTICLES_ck_id] CHECK ([id] > 0),
CONSTRAINT [ARTICLES_ck_nom] CHECK ([nom] <> ''),
CONSTRAINT [ARTICLES_ck_prix] CHECK ([prix] >= 0),
CONSTRAINT [ARTICLES_ck_stockactuel] CHECK ([stockactuel] >= 0),
CONSTRAINT [ARTICLES_ck_stockminimum] CHECK ([stockminimum] >= 0)
)
ON [PRIMARY]
GO
现在是时候向表 [ARTICLES] 中插入一些数据了。为此,请使用其面板 [Data]:

按钮 [+] 用于添加一行,按钮 [-] 用于删除一行。数据通过直接在表中每行的输入字段中输入来添加。通过下方的按钮 [Post Edit] 可以确认一行:
![]()
创建两条商品:

[MS SQL Manager] 允许通过选项 SQL 或 [Tools/Show SQL Editor] 生成查询。 此时即可访问一个功能强大的 SQL 查询编辑器,用于执行查询。这些查询会被保存,因此可以回溯已执行的查询。以下是一个示例:

通过上方的 [Execute] 按钮执行 SQL 查询。结果如下:

我们的演示到此结束。[MS SQL Manager - MSDE]这对组合,与[IBExpert - Firebird]一样,同样非常适合用于学习数据库。
3.15. 创建源文件 ODBC [MSDE]
ODBC驱动程序(适用于SQL Server)通常默认安装在Windows机器上。
- 运行 [Démarrer -> Paramètres -> Outil de configuration -> Outils d'administration -> Sources de données ODBC] 工具:

- 将显示以下窗口:

- 在“系统数据源”面板([System DSN])中添加一个新的数据源 [Add],并将它与上一节中创建的数据库 MSDE 关联:

- 首先,我们需要指定要使用的驱动程序 ODBC。 如上所示,我们先为 [SQL Server] 选择驱动程序,然后进行 [Terminer] 的操作。此时,ODBC 驱动程序的向导(基于 [SQL Server])将接管操作:

- 我们填写各个字段:
源文件名 ODBC - 可以是任意名称 | |
可以是任意名称 | |
存储源数据 ODBC 的服务器名称 MSDE |
- 我们创建 [Suivant] 来提供新信息:

- 我们填写各个字段:
指定将使用在服务器 MSDE 中声明的用户名连接到数据源 ODBC | |
用户登录名 | |
用户密码 |
- 请注意,这是我们首次使用前文创建的用户(admarticles、mdparticles)。再次执行 [Suivant] 以生成以下新页面:

- 我们填写各个字段:
我们将 [dbarticles] 选定为用户 [admarticles] 的默认数据库 |
- 执行 [Suivant] 以生成以下新表单:

- 我们接受默认值并生成 [Terminer]。以下是即将创建的源 ODBC 的特性摘要:

- 通过 [Tester la source de données] 按钮,我们可以验证信息是否有效。请确认 MSDE 已启动,然后测试连接:

- 现在我们可以确定 [admarticles, mdparticles] 这一对已成功识别。
如需进行进一步测试,读者可按照第 3.10 节所述的步骤操作。
3.16. 连接到 MSDE 数据库的连接字符串
- 启动 Visual Studio 并显示服务器资源管理器 [Affichage/Explorateur de serveurs]:
![]() |
- 右键单击 [Connexion de données],并选择 [Ajouter une connexion] 选项:

- 在 [Provider] 面板中,指定要使用 SQL 服务器作为源,然后切换到 [Connection] 面板。请注意,此处不通过 ODBC 驱动程序。

要连接的服务器名称 MSDE | |
用于连接数据库的用户名 | |
与该用户名关联的密码 | |
要操作的数据库 |
点击按钮 [Tester la connexion] 可验证信息是否有效:

- 通过 [OK] 确认向导。颇为奇怪的是,新窗口会要求输入连接参数:

- 重新输入这些信息并执行 [OK]。此时,数据源将出现在 Visual Studio 的 [Explorateur de serveurs] 窗口中:

- 双击表 [ARTICLES],即可访问该表的数据:

- 若在 [Explorateur de serveurs] 面板中右键单击链接 [portable1_tahe\msde140405.dbarticles.admarticles],并选择 [Propriétés] 选项,即可访问连接属性:

- 连接字符串 [ConnectString] 是一个值得了解的属性,因为代码 .NET 需要它来建立与数据库的连接。此处的连接字符串为:
Provider=SQLOLEDB.1;Persist Security Info=False;User ID=admarticles;Initial Catalog=dbarticles;Data Source=portable1_tahe\msde140405;Use Procedure for Prepare=1;Auto Translate=True;Packet Size=4096;Workstation ID=PORTABLE1_TAHE;Use Encryption for Data=False;Tag with column collation when possible=False
该连接字符串中的许多元素都有默认值。我们可以直接使用以下连接字符串:






























