• 沒有找到結果。

拓展知识:ODBC 技术和 Recordset 记录集

ActiveX  Data  Objects(ADO)是一项容易使用并且可扩展的将数据库访问添加到 Web 页 的技术。可以使用  ADO  去编写紧凑简明的脚本以便连接到  Open  Database  Connectivity 

(ODBC)兼容的数据库和 OLE DB 兼容的数据源。

如果您是一个对数据库连接有一定了解的脚本编写人员,那么您将发现 ADO 命令语句并 不复杂而且容易掌握。同样地,如果您是一个经验丰富的数据库编程人员,您将会正确认识  ADO 的先进的与语言无关性和查询处理功能。 

1.创建 ODBC DSN 文件

在创建数据库脚本之前,必须提供一条使 ADO 定位、标识和与数据库通讯的途径。数据 库驱动程序使用 Data  Source  Name(DSN)定位和标识特定的 ODBC 兼容数据库,将信息从  Web  应用程序传递给数据库。典型情况下,DSN  包含数据库配置、用户安全性和定位信息,

且可以获取  Windows NT 注册表项中或文本文件的表格。

通过 ODBC,您可以选择希望创建的 DSN 的类型:用户、系统或文件。用户和系统 DSN  存储在 Windows  NT 注册表中。系统 DSN 允许所有的用户登录到特定的服务器上去访问数据

2.配置 Microsoft Access 数据库的文件  DSN 

在“创建新数据源”对话框中,从列表框选择“Microsoft Access Driver” ,然后单击“下 一步”按钮。

键入您的 DSN 文件名,然后单击“下一步”按钮。

单击“完成”按钮创建数据源。

在“ODBC Microsoft Access 97  安装程序”对话框中,单击“选择”按钮。选择 Microsoft  Access 数据库文件(*.mdb) ,然后单击“确定”按钮。

注意由于性能和可靠性的原因,我们极力推荐使用“客户-服务器数据库引擎”配置由

74

电子商务网站建设与管理实务

这样一种 Web 应用程序驱动的数据,这些 Web 应用程序必须满足 10 个以上的用户同时访问。

尽管 ASP 可以使用任何 ODBC 兼容的数据库,但它是为使用客户-服务器数据库而设计的,

而且经过了严格的测试,这些数据库包括 Microsoft SQL Server、Oracle  等。 

ASP 支持共享文件数据库(如 Microsoft Access 或 Microsoft FoxPro)作为有效的数据源。

尽管在 ASP 文档中的一些示例使用共享文件数据库,但我们建议只将此类数据库引擎用于开 发或有限的配置方案。共享文件数据库可能无法很好地适用于可满足高需求、高质量的  Web  应用程序的客户-服务器数据库。 

3.配置 SQL Server 数据库文件 DSN 

注意如果数据库驻留在远程服务器上,请与服务器管理员联系,获取附加的配置信息;

下面的过程使用 SQL Server 的 ODBC 默认的设置,它可能不适用于您的硬件配置。

在“创建新数据源”对话框中,从列表框中选择“SQL Server” ,然后单击“下一步”

在“创建  SQL Server 的新数据源”对话框中,设置默认数据库、存储过程设置的驱动程 序和 ANSI 标识,然后单击“下一步”按钮(要获取详细信息,请单击“帮助” ) 。

在对话框(同样名为“创建 SQL Server 的新数据源” )中,选择一种字符转换方法,然后 单击“下一步”按钮(详细信息,请单击“帮助” ) 。

在下一个对话框(同样名为“创建 SQL Server 的新数据源” )中,选择登录设置。

注意典型情况下,只能使用日志来调试数据库访问问题。

在“ODBCMicrosoft SQL Server 安装程序”对话框中,单击“测试数据源” 。如果 DSN 正 确创建, “测试结果”对话框将指出测试成功完成。 

4.SQL Server 连接和安全信息

如果您正在开发用于连接远程 SQL Server 数据库的 ASP 数据库应用程序, 应考虑以下问题:

连接方案:您可以选择 TCP/IP 套接字和命名管道的方法访问远程的 SQL Server 数据库。

当使用命名管道时,因为在建立连接之前,数据库用户必须被 Windows NT 确认,所以对只 有适当的 SQL  Server 访问身份而在该计算机上没有 Windows  NT 用户账号的用户可能会被拒 绝访问命名管道。作为一种替代方案,使用  TCP/IP  套接字的连接可直接连接到数据库服务 器,而不必通过使用命名管道的中间计算机。因为使用  TCP/IP  套接字连接可直接连接到数 据库 Server,所以通过 SQL Server 的确认,用户就可以获得访问权,而不必通过 Windows NT  的确认。

注意在连接到远程数据库时使用 TCP/IP 套接字可提高性能。

安全性:如果您使用 SQL Server 的集成或混合安全特性,并且 SQL Server 数据库位于远 程服务器上,则不能使用 Windows  NT 请求/响应的确认。也就是说,不能将 Windows  NT 请

项目

网站数据库的建设与使用

75

求/响应身份证转发到远程计算机上,而只能使用基本身份验证,它根据用户提供用户名和口 令信息进行。

有关这一主题的详细信息, 请参阅 http://www.microsoft.com/sqlsupport/上的 Microsoft SQL  Server 技术支持主页。 

5.配置 Oracle 数据库文件 DSN 

首先要确保 Oracle 用户软件被正确地安装要创建 DSN 的计算机上。详细信息请与服务器 管理员联系或参阅数据库软件文档。

在“创建新数据源”对话框中,从列表框中选择“MicrosoftODBCfor  Oracle” ,然后单击

“下一步”按钮。

键入 DSN 文件的名称,然后单击“下一步”按钮。

单击“完成”按钮创建数据源。

输入用户名、密码和服务器名,然后单击“确定”按钮。

注意 DSN 文件用.dsn 扩展名, 位于  \\Programs\\Common Files\\ODBC\\Data Sources  目录中。

有关创建 DSN 文件的详细信息, 请访问 Microsoft ODBC Web 站点: http://microsoft.com/odbc/。 

6.连接数据库

访问数据库信息的第一步是和数据库源建立连接。ADO 提供 Connection 对象,可以使用 该对象建立和管理应用程序和 ODBC  数据库之间的连接。Connection 对象具有各种属性和方 法, 可以使用它们打开和关闭数据库连接, 并且发出查询请求来更新信息。 要建立数据库连接,

首先应创建 Connection 对象的实例。例如,下面的脚本创建  Connection 对象,接着打开数据 库连接: 

<% 

\'Create a connection object 

Set cn = Server.CreateObject(\"ADODB.Connection\") 

\'Open a connection; the string refers to the DSN  cn.Open \"FILEDSN=MyDatabase.dsn\" 

%> 

注意无论在等号(=)之前还是之后,DSN 字符串都不能包含空格。

在这种情况下,Connection  对象的 Open 方法引用基于 DSN 的文件,其中包含关于数据 库的位置和配置信息。也可以不引用 DSN,直接显式引用供应程序、数据源、用户 ID 和密码。

有关建立连接的可选方法的详细信息,请参阅 Microsoft ActiveX Data Objects(ADO) 。  7.用 Connection 对象执行查询

用 Connection 对象的 Execute 方法,您可以发出结构化查询语言(SQL)查询数据库源并 检索结果。SQL 是用于与数据库通信的工业标准语言,它有许多命令可用来检索和更新信息。

下面的脚本使用 Connection 对象的 Execute 方法在 SQL INSERT 命令的表格中发出查询,

该命令将数据插入特定的数据库表格。在下面的示例中,脚本将名称  Jose  Lugo  插入名为  Customers 的数据库表中。 

<% 

\'Define file based DSN 

strDSN = \"FILEDSN=MyDatabase.dsn\" 

\'Instantiate the Connection object and open a database connection

76

电子商务网站建设与管理实务

 

除了 SQL INSERT 命令以外, 您也可以使用 SQL UPDATE 和 DELETE 命令更改和删除数 据库信息。

用 SQL UPDATE 命令,您可以改变数据库表中各项目值。下面的脚本使用 UPDATE 命令 将 Customers 表中每个 LastName 字段包含姓 Smith  记录的 FirstName 字段更改为 Jeff。 

<% 

Set cn = Server.CreateObject(\"ADODB.Connection\")  cn.Open \"FILEDSN=MyDatabase.dsn\" 

cn.Execute \"UPDATE Customers SET FirstName = \'Jeff\' WHERE LastName = 

\'Smith\' \" 

%> 

要想从数据库表中删除特定的记录,可使用 SQL DELETE 命令。下面的脚本从 Customers  表中删除了所有姓 Smith 的行: 

<% 

Set cn = Server.CreateObject(\"ADODB.Connection\")  cn.Open \"FILEDSN=MyDatabase.dsn\" 

cn.Execute \"DELETE FROM Customers WHERE LastName = \'Smith\'\" 

%> 

注意在使用 SQL DELETE 命令时,必须谨慎从事。当使用不带 WHERE 子句的 DELETE  命令时,它将删除表中的所有行。一定要包含 SQL WHERE 子句来指定要删除的确切行。 

8.使用 Recordset 对象处理结果

尽管 Connection 对象简化了连接数据库和查询任务,但 Connection 对象仍有许多不足。

确切地说,检索和显示数据库信息的  Connection  对象不能用于创建脚本;您必须确切知道要 对数据库作出的更改,然后才能使用查询实现更改。

对于检索数据、检查结果、更改数据库,ADO 提供了 Recordset 对象。正如它的名称所暗 示的那样,Recordset  对象有许多可以使用的特性,根据您的查询限制,检索并且显示一组数 据库行,即记录。Recordset 对象保持查询返回的记录的位置,允许一次一项逐步扫描结果。

根据 Recordset 对象的指针类型属性设置,可以滚动和更新记录。数据库指针可以在一组 记录中定位到特定的项。指针还用于检索和检查记录,然后在这些记录的基础上执行操作。 

Recordset  对象有一些属性,可用于精确地控制指针的行为,提高检查和更新结果的能力。例 如, 可以使用 CursorType 和 CursorLocation 属性设置指针的类型, 将结果返回给客户端应用程 序(结果通常保留在数据库服务器上)并显示其他用户对数据库的最后一次更改。有关配置  Recordset 对象指针的信息,请参阅 Microsoft ActiveX Data Objects(ADO) 。

项目

网站数据库的建设与使用

  77

9.检索记录

一个成功的数据库应用程序都使用 Connection 对象建立链接并使用 Recordset 对象处理返 回的数据。通过“协调”两个对象的特定功能,您可以开发出几乎可以执行任何数据处理任务 的数据库应用程序。例如,下面的服务器端脚本使用 Recordset 对象执行 SQL SELECT 命令。 

SELECT 命令检索一组基于查询限制的信息。查询也包含 SQL  WHERE 子句,用来缩小查询 的范围。此例中,WHERE 子句将查询限制为所有的 Customers 数据库表中包含的姓 Smith 的 记录。 

<% 

\'Establish a connection with data source  strDSN = \"FILEDSN=MyDatabase.dsn\" 

Set cn = Server.CreateObject(\"ADODB.Connection\") 

\'Smith\' \" 

rsCustomers.Open strSQL, cn 

Response.Write objFirstName & \" \" & objLastName & \"<BR>\" 

rsCustomers.MoveNext  Loop 

%> 

注意,在前面的例子中,用来建立数据库连接的 Connection 对象和 Recordset 对象使用该 连接从数据库中检索结果。 当您需要精确地设置和数据库建立链接所采用的方式时, 这个方法 是非常有用的。例如,如果需要在连接尝试失败之前指定等待的时间,则需要使用 Connection  对象去设置属性。 但是, 如果仅仅想使用 ADO 默认的连接属性建立连接, 则应该使用 Recordset  对象的 Open 方法去建立链接: 

<% 

strDSN = \"FILEDSN=MyDatabase.dsn\" 

strSQL = \"SELECT FirstName, LastName FROM Customers WHERE LastName = 

\'Smith\' \" 

Set rsCustomers = Server.CreateObject(\"ADODB.Recordset\") 

78

电子商务网站建设与管理实务

 

Set objLastName = rsCustomers(\"LastName\")  Do Until rsCustomers.EOF 

Response.Write objFirstName & \" \" & objLastName & \"<BR>\" 

rsCustomers.MoveNext  Loop 

%> 

当使用 Recordset 对象的 Open 方法建立一个连接时,必须使用 Connection 对象去保证连

当使用 Recordset 对象的 Open 方法建立一个连接时,必须使用 Connection 对象去保证连

相關文件