配置 Oracle 数据库文件 DSN
首先要确保 Oracle 用户软件被正确地安装要创建 DSN 的计算机上。详细信息,请与服务器管理员联系或参阅数据库软件文档。
在“创建新数据源”对话框中,从列表框中选择“Microsoft ODBC for Oracle”,然后单击“下一步”。 键入 DSN 文件的名称,然后单击“下一步”。 单击“完成”创建数据源。 输入用户名、密码和服务器名,然后单击“确定”。 注意 DSN 文件用 .dsn 扩展名,位于 \Programs\Common Files\ODBC\Data Sources 目录中。
有关创建 DSN 文件的详细信息,请访问 Microsoft ODBC Web 站点:http://microsoft.com/odbc/。
连接数据库 访问数据库信息的第一步是和数据库源建立连接。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 和密码。
用 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 Set cn = Server.CreateObject("ADODB.Connection") cn.Open strDSN
'Define SQL SELECT statement strSQL = "INSERT INTO Customers (FirstName, LastName) VALUES ('Jose','Lugo')" 'Use the Execute method to issue a SQL query to database cn.Execute(strSQL) %> 注意 基于 DSN 路径字符串的文件在等号(=)前后不应包含空格。
除了 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 子句来指定要删除的确切行。
使用 Recordset 对象处理结果 尽管 Connection 对象简化了连接数据库和查询任务,但 Connection 对象仍有许多不足。确切地说,检索和显示数据库信息的 Connection 对象不能用于创建脚本;您必须确切知道要对数据库作出的更改,然后才能使用查询实现更改。
对于检索数据、检查结果、更改数据库,ADO 提供了 Recordset 对象。正如它的名称所暗示的那样,Recordset 对象有许多您可以使用的特性,根据您的查询限制,检索并且显示一组数据库行,即“记录”。 Recordset 对象保持查询返回的记录的位置,允许您一次一项逐步扫描结果。
根据 Recordset 对象的指针类型属性设置,您可以滚动和更新记录。数据库指针可以让您在一组记录中定位到特定的项。指针还用于检索和检查记录,然后在这些记录的基础上执行操作。Recordset 对象有一些属性,可用于精确地控制指针的行为,提高您检查和更新结果的能力。例如,您可以使用 CursorType 和 CursorLocation 属性设置指针的类型,将结果返回给客户端应用程序(结果通常保留在数据库服务器上)并显示其他用户对数据库的最后一次更改。
检索记录 一个成功的数据库应用程序都使用 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") cn.Open strDSN
'Instantiate a Recordset object Set rsCustomers = Server.CreateObject("ADODB.Recordset") 'Open a recordset using the Open method ' and use the connection established by the Connection object strSQL = "SELECT FirstName, LastName FROM Customers WHERE LastName = 'Smith' " rsCustomers.Open strSQL, cn 'Cycle through record set and display the results ' and increment record position with MoveNext method Set objFirstName = rsCustomers("FirstName") Set objLastName = rsCustomers("LastName") Do Until rsCustomers.EOF 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")
'Open a connection using the Open method 'and use the connection established by the Connection object rsCustomers.Open strSQL, strDSN 'Cycle through the record set, display the results, ' and increment record position with MoveNext method Set objFirstName = rsCustomers("FirstName") Set objLastName = rsCustomers("LastName") Do Until rsCustomers.EOF Response.Write objFirstName & " " & objLastName & "<BR>" rsCustomers.MoveNext Loop %> 当使用 Recordset 对象的 Open 方法建立一个连接时,必须使用 Connection 对象去保证链接的安全。
用 Command 对象改善查询 通过 ADO Command 对象,可以象用 Connection 对象和 Recordset 对象那样执行查询,唯一的不同在于用 Command 对象您可以在数据库源上准备、编译您的查询并且反复使用一组不同的值来发出查询。这种方式的编译查询的优点是您可以最大程度地减少向现有查询重复发出修改的请求所需的时间。另外,您还可以在执行之前通过您的查询的可变部分的选项使 SQL 查询保持局部未定义。
Command 对象的 parameter 集合减少了您的麻烦,使您不必在每次重新发出查询时重新建立查询。例如,如果需要有规律地更新基于库存清单的 Web 系统中的供应和价格信息,可以用下面的方法预先定义查询:
<% 'Open a connection using Connection object Command object 'does not have an Open method for establishing a connection strDSN = "FILEDSN=MyDatabase.dsn" Set cn = Server.CreateObject("ADODB.Connection") cn.Open strDSN
'Instantiate Command object; use ActiveConnection property to attach 'connection to Command object Set cm= Server.CreateObject("ADODB.Command") Set cm.ActiveConnection = cn
'Define SQL query cm.CommandText = "INSERT INTO Inventory (Material, Quantity) VALUES (?, ?)"
'Save a prepared (or pre-compiled) version of the query specified in CommandText 'property before a Command object's first execution. cm.Prepared = True
'Define query parameter configuration information cm.Parameters.Append cm.CreateParameter("material_type",200, ,255 ) cm.Parameters.Append cm.CreateParameter("quantity",200, ,255 )
'Define and execute first insert cm("material_type") = "light bulbs" cm("quantity") = "40" cm.Execute 'Define and execute second insert cm("material_type") = "fuses" cm("quantity") = "600" cm.Execute %> 请检查上面的例子,您将注意到,脚本用不同的数值重复构建和发出一个 SQL 查询,而没有重新定义和重发送查询到数据库源。用 Command 对象编译查询也可避免 SQL 查询引起的合并字符串和表格变量问题。特别是,通过使用 Command 对象的 Parameter 集合可以避免与定义字符串、日期、时间变量的类型有关的问题。例如,包含“'”的 SQL 查询值可能导致查询失败:
strSQL = "INSERT INTO Customers (FirstName, LastName) VALUES ('Robert','O'Hara')" 注意,姓 O'Hara 中包含一个“'”,它与在 SQL VALUES 关键字中用来表示数据的“'”冲突。通过将查询数值作为 Command 对象参数绑定,可以避免此类问题。
上一页 [1] [2] [3] 下一页 |