当前位置:首页 » 网站技术 » ASP

访问数据库 [2]

...

  检索记录

  一个成功的数据库应用程序都使用 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对象去保证链接的安全。详细信息,请参阅 Microsoft ActiveX Data Objects (ADO)。

  用 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对象参数绑定,可以避免此类问题。

结合HTML表格和数据库访问
  包含 HTML表格的 Web页可使用户远程查询数据库并且检索特定的信息。用 ADO您可以创建非常简单的脚本来收集用户表格信息、创建自定义的数据库查询以及将信息返回给用户。使用 ASP Request对象,您可以检索输入到 HTML表格的信息并将这些信息合并到 SQL语句中。例如,下面的脚本模块将 HTML表格提供的信息插入表格中。此脚本用 Request对象的 Form集合收集用户信息。

  <%

  'Open a connection using Connection object. The 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

  'and 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 MySeedsTable (Type) VALUES (?)"

  'Define query parameter configuration information

  cm.Parameters.Append cm.CreateParameter("type",200, ,255 )

  'Define and execute insert

  cm("type") = Request("SeedType")

  cm.Execute

  %>

  有关表格和使用 ASP Request对象的详细信息,请参阅使用 HTML表格。

管理数据库连接
  设计一个能经得起考验的 Web数据库应用程序(例如为几千个客户服务的联机购物应用程序)的最大挑战,在于如何合理地管理数据库连接。打开并且保持数据库连接,即使在没有信息传输时,也会严重耗费数据库服务器的资源并且可能会导致连接性问题。设计良好的 Web数据库应用程序将回收数据库连接并能够补偿由于网络堵塞造成的延迟。

继续阅读
访问数据库 [3]
调试 ASP 脚本 [1]
调试 ASP 脚本 [2]
维护 ASP 应用程序的安全 [1]
维护 ASP 应用程序的安全 [2]
ASP.NET 简介
asp.net教程之一:概论(1)
asp.net教程之一:概论(2)
实现ASP文件在线发邮件
发表评论

昵称:
最新评论
暂时没有评论!