标题标题  显示论坛会员列表名单  搜索论坛搜索  HelpHelp
  注册注册  登入登入
ASP教学区
 DoReMe : ASP教学区
主题 话题: 第二十二章 Activex数据对像 回复发表新主题
作者
贴子内容 << Prev Topic下一个主题 >>
erisa
Groupie
Groupie


加入: 2005/2月/16
Online Status: Offline
回复: 43
Posted: 2005/2月/16 11:48上午 | IP记录 引用 erisa

这一章介绍Activex数据对像(ADO)。第一节是这些对象的概述。第二节一步一步地引导你使用ADO从数据库中读取数据和 向数据库中存储数据。最后,在第三节,将向你介绍一种特殊的重要的ADO对像:连接对象。
Back to Top 查看 erisa's 资料 搜索其它贴子 erisa 访问 erisa's
 
erisa
Groupie
Groupie


加入: 2005/2月/16
Online Status: Offline
回复: 43
Posted: 2005/2月/16 11:49上午 | IP记录 引用 erisa

Activex数据对像概述

使用Activex数据对像(ADO),你可以对来自许多种数据提供者的数据进行读取和写入操作。例如,你可以使用ADO来访问 Microsoft Access,Microsoft SQL和Oracle数据库中的信息。你甚至可以使用ADO从Microsoft Excel表格中读取信息。

在这本书里,你将学习如何使用ADO操作Microsoft SQL Sever数据库。所有的例子都假定你是在使用这种数据库。但是,你应该知道,你在下面几章中学到的大部分内容对其它类型的数据 库也是适用的。

在第三部分「操作数据:SQL」中,你学习了如何适用结构化查询语言(SQL)。从这一章开始,你将很好地应用第三章所学的知识 。学习的重点是结合ADO,使用SQL对一个数据库进行读写操作。ADO和SQL的的这种结合是功能很强大的。

 

注意

要了解Activex数据对象的方法,属性,和集合的详细内容,请参考书后的附录A,「ASP对像和组件快速参考」。

 

Activex数据对像共有七种独立的对象。下面列出了这七种对象的名字,并简要介绍了它们的功能:


连接对象。代表与一个数据源的唯一对话。例如,你可以用连接对像来打开一个对Microsoft SQL Sever的连接。


记录集对象。代表来自一个数据提供者的一组记录。例如,你可以用一个记录集对像来修改一个SQL Sever表中的记录。


域对象。代表一个记录集中的一个域。


命令对象。代表一个命令。例如,你可以用命令对像执行一个SQL存储过程或有参数的查询。


参数对象。代表SQL存储过程或有参数查询中的一个参数。


属性对象。代表数据提供者的具体属性。

错误对象。代表ADO错误。

Back to Top 查看 erisa's 资料 搜索其它贴子 erisa 访问 erisa's
 
erisa
Groupie
Groupie


加入: 2005/2月/16
Online Status: Offline
回复: 43
Posted: 2005/2月/16 11:50上午 | IP记录 引用 erisa

使用Activex数据对像

这一节将一步一步地引导你在你的ASP网页中使用ADO。首先你将学习如何配置你的服务器以使用ADO。接著,在下一节提供了一 个简单的例子,演示如何使用ADO对数据库进行读写操作。最后,考虑到你会遇到一些问题,有一节内容讲述ADO的调试。

 

配置服务器以使用Activex数据对像

本书假定你是在Microsoft SQL Sever中使用ADO。在继续下面的内容之前,Microsoft SQL Sever必须与你的Web服务器安装在同一台机器上,或者两台机器在同一个网络中。要了解安装和配置Microsoft SQL Sever的详细内容,请参阅第三章「安装和使用SQL Sever」。

在能够使用ADO之前,你必须先建立一个数据源。数据源包含了如何与一个数据提供者进行连接的信息。在这种情况下,你将使用数据 源与Microsoft SQL Sever建立连接。数据源共有三种类型:你可以建立用户数据源,系统数据源,或者文件数据源。当你要建立一个与Web服务器一 起使用的数据源时,你应该建立一个文件数据源。建立文件数据源的好处是连接信息存储在一个实际的文件中。不止一个用户可以访问这 个文件。而且,如果你需要把Web应用程序从一种Web服务器移植到另一种Web服务器上,你只需要移植这个文件即可。

 

注意

在建立一个数据源之前,应确保SQL Sever正在运行。通过MS SQL Sever程序组中的SQL服务管理器可以确定SQL服务是否在运行。

 

按如下步骤可以建立一个新的文件数据源:


打开WINDOWS NT SEVER的控制面板(选择Start|Setting|Control Panel)。


单击ODBC的图标。


单击卷标File DSN。


单击按钮Add,出现Create New Data Source对话框。


在对话框中,选择SQL Sever驱动程序并单击按钮Next,出现Create a New Data Source对话框。


输入你所建的数据源的名字。例如,输入mydata.dsn。单击Next,再单击Finish,则wizard程序Creat e a New Data Source to SQL Sever会被启动(见图22.1)。


在文本框Description中,输入一个描述,如My Data Source。在文本框Sever中,输入安装了SQL Sever的服务器的名字。(如果SQL Sever与Web服务器安装在同一台机器上,你可以输入Local)单击Next。


一系列对话框出现,要求你定制数据源的各种属性。你要指定一个缺省数据库。选择你的表所在的数据库作为缺省数据库。让其它的选项 保持其缺省值,单击Next,关闭所有的对话框。


最后,给你一个测试新数据源的机会。如果测试成功了,单击OK,添加这个新数据源。

 

图22.1 用SQL Server Wizard创建一个新数据源


你已经建立了一个名为mydata.dsn的新数据源。你可以使用这个数据源连接到Microsoft SQL Sever.(下一节将介绍如何进行连接)

 

使用Activex数据对像对数据库进行读写

这一节给出了一个如何使用ADO对Microsoft SQL Sever数据库进行读写操作的例子。举这个例子有两个目的:它演示了从ASP网页中访问Microsoft SQL Sever的基本方法,而且你可以用这个例子检测服务器的配置是否正确。

表22.1所示的网页把文本「Hello World!」插入一个表中,然后,从表中取出这个文本并显示在浏览器中。

 

表22.1 Hello World!

<HTML><HEAD><TITLE> ADO Example </TITLE></HEAD><BODY><%Set MyConn=Server.CreateObject("ADODB.Connection")MyConn.Open "FILEDSN=d:\Program Files\Common Files\ODBC\Data Sources\MyData.dsn"MyConn.Execute "INSERT MyTable (MyColumn) VALUES ('Hello World!')"Set RS=MyConn.Execute("SELECT * FROM MyTable")Response.Write(RS("MyColumn"))MyConn.Close%>< /BODY></HTML>

 

在使用这个例子之前,你需要建立一个名为Mytable的表。你可以使用ISQL/w来创建它。启动这个程序,选择你的缺省数据 库,然后执行如下的SQL 语句:

 

CREATE TABLE mytable (mycolumn VARCHAR(255))

 

注意

要了解建立表的更多信息,请参见第10章「SQL基础」。

 

这个网页的第一行创建了连接对象的一个实例。接下来调用连接对象的open方法,打开了一个对数据库的连接。在open方法中用 到了你在上一节所建立的数据源,以建立对数据库的连接。(用你的计算机中的实际路径代替这个脚本中文件数据源的路径。)

一旦打开了一个连接,你就可以用这个连接执行SQL语句。在这个例子中,用Execute方法执行了两个SQL语句。首先,用S QL INSERT语句把字符串「Hello World!」输入到了数据库中。然后用SQL SELECT语句从表中取出了这个字符串。

如果你的系统配置正确,字符串「Hello World!」将会显示在浏览器窗口中。该字符串先被插入数据库,又被取出并显示。如果有什么不正常,请参看下一节。

 

调试Activex数据对像

如果你用ADO访问Microsoft SQL Sever时出现问题,这一节将对你有所帮助。许多原因会导致上一节中所示的ASP网页执行失败。下面列出了你通常会遇到的一些 问题的症状以及可能的原因:

 


症状:出现错误信息 Unable to create file buffer.

原因:文件数据源不正确。如果文件数据源的路径或名字有误,或者该数据源不存在,你就会收到这个错误信息。你应确保网页中ope n方法所使用的文件数据源的路径与你计算机中的实际路径相同。

 


症状:出现错误信息 Invalid object name 『mytablw』

原因1:数据库中不存在表』mytable』。按照上一节中所讲的方法用ISQL/w创建这个表。

原因2:表mytable不在缺省数据库中。你需要指定一个缺省数据库。选择Start|Settings|Control Panel。单击ODBC图标,然后单击File DSN卷标。选择你的文件数据源的名字,单击Configure,再单击Options。在对话框中指定你的确省数据库的名字。

 


症状:出现错误信息 The sever appears to be not available

原因:SQL Sever没有运行。从Microsoft SQL Sever程序组中选择SQL Sevice Manager。选择MSSQLSEVER并单击绿灯。

 


症状:出现错误信息 Login failed。

原因:你没有使用WINDOWS NT确认模式。建立数据源时输入了错误的帐号和密码。选择Start|Settings|Control Panel。单击ODBC图标,然后单击File DSN卷标。选择你的文件数据源的名字并单击Configure。你可以选择Use Trusted Connection,或输入合法的帐号和密码。

 


症状:出现错误信息 INSERT permission denied on object mytable 或

SELECT permission denied on objict mytable。

原因:建立数据源时指定的帐号没有访问表mytable的足够的权限。你需要改变文件数 据源的注册帐号,或者给该用户或用户组提供更多的权限。

 

要提供对一个表的更多权限,从Microsoft SQL Sever程序组中启动SQL事务管理器,找到表mytable并用右键点击它。选择Permissions。现在你可以为不同 的用户或用户组设置对这个表的操作权限。

Back to Top 查看 erisa's 资料 搜索其它贴子 erisa 访问 erisa's
 
erisa
Groupie
Groupie


加入: 2005/2月/16
Online Status: Offline
回复: 43
Posted: 2005/2月/16 11:50上午 | IP记录 引用 erisa

使用连接对像

与数据库的所通信都要通过一个打开的连接来进行。在对一个数据库进行数据的插入和读取之前,必须先打开与这个数据库的连接。这种 打开和关闭一个连接的操作与打电话的过程有相似之处。在你能够与SQL Sever进行通信之前,你必须先呼叫它。

这一节讲如何使用ADO连接对象。首先你将学习如何打开和关闭一个对数据库的连接。接下来,你将学会如何通过一个打开的连接执行 SQL语句。最后,你将学习如何用连接对像创建事务处理。

 

打开和关闭数据库连接

要打开与一个数据库的连接,你可以创建连接对象的一个实例。创建了这个实例之后,你就可以调用连接对象的open方法,打开一个 连接。这里有一个例子:

 

<%

Set MyConn=Sever.CreateObject(「ADODB.Connection」)

MyConn.Open 「FILEDSN=d:\Program Files\Common Files\ODBC\Data Sources\MyData.dsn」

MyConn.Execute 「INSERT Mytable (mycolumn) VALUES (『Hello World!』)」

MyConn.Close

%>

 

在这个例子中,创建了连接对象的一个实例MyConn。然后调用连接对象的open方法。接下来,调用连接对象的Execute 方法,执行了一个SQL语句。最后,关闭这个连接。

每次打开一个新连接时都要输入文件数据源的路径和名字,这实在是个另人厌烦的工作。你可以把这个字符串分配给一个session 变量或者在一个包含文件中把它定义为一个常量。这样,你只需要键入一个变量名即可,而不必输入文件数据源的完整名称。要定义一个 包含有文件数据源名字的session变量,你可以在文件Global.asa中定义。例如,你可以把下面的内容添加到文件Gl obal.asa的session_onstart脚本中:

 

session(「connectionstring」)=」FILEDSN=d:\Program Files\Common

Files\ODBC\Data Sources\MyData.dsn」

 

注意

要了解使用session变量的更多信息,请参阅第16章「使用Active Sever Pages Sessions」。

 

建立了这个session变量后,你就可以用如下的脚本打开一个连接:

 

<%

Set MyConn=Sever.CreateObject(「ADODB.Connection」)

MyConn.Open Session(「connectionstring」)

%>

 

把文件数据源的名字分配给一个session变量的另一个好处是,你将来可以很容易地改变量据源。如果你需要使用另外一个数据源 ,你只要改变文件Global.asa中的一个session变量的值即可。

使用完一个连接后,你应该关闭它。这就像挂断一个电话,从而释放占用的线路。连接对象的close方法可以关闭一个连接。关闭了 一个连接后,你就不能在用这个连接与数据库进行通信。因此,依赖这个连接支持的其它对象也不能再与数据库相通信。

 

通过打开的连接执行SQL语句

通过打开的连接执行SQL语句,要用到Execute方法。这个方法有两种形式:一种形式用来从数据库中返回信息,当不需要返回 信息时,则使用另一种形式。

下面的例子演示了如何使用Execute方法执行一个没有返回结果的SQL语句:

 

<%

Set MyConn=Sever.CreateObject(「ADODB.Connection」)

MyConn.Open 「FILEDSN=d:\Program Files\Common Files\

OBDC\Data Sources\MyData.dsn」

MyConn.Execute 「INSERT Mytable (MyColumn) VALUES(『Hello World!』)」

MyConn.Close

%>

 

在这个例子中,用Execute方法执行了一个SQL SELECT 语句。因为没有返回结果,Execute方法不使用括号。

你也可以用Execute方法从一个查询返回结果。如下例所示:

 

<%

Set MyConn=Sever.CreateObject(「ADODB.Connection」)

MyConn.Open 「FILEDSN=d:\Program Files\

Common Files\ODBC\Data Sources\MyData.dsn」

Set RS=MyConn.Execute(「SELECT * FROM Mytable」)

MyConn.Close

%>

 

在这个例子中,使用了Execute()方法以返回一个SQL SELECT查询的结果。与上一个例子不同,这个Execute方法使用了括号。当你要返回结果时,千万别忘了使用括号,否则你 会收到错误信息 Expected end of statement.

这个SQL查询的结果被读取到记录集对象的一个实例RS中。该记录集由Execute()方法自动创建。你将在下一章中学习如何 使用记录集。

Execute方法包含两个可选参数。你可以给一个RecordsAffected参数,用来保存被执行的SQL语句所操作的记 录个数。你还可以给一个Options参数,用来提供被执行的SQL语句的有关信息。下面的例子同时使用了这两种可选参数:

 

<!--#INCLUDE VIRTUAL=」ADOVBS.inc」-->

<%

Set MyConn=Sever.CreateObject(「ADODB.Connection」)

MyConn.Open 「FILEDSN=d:\Program Files\

Common Files\ODBC\Data Sources\MyData.dsn」

MyConn.Execute 「UPDATE Mytable Set Mycolumn=』Goodbye!』」,HowMany,adCMDText

Response.Write(HowMany)

MyConn.Close

%>

 

在这个脚本中,执行了一个SQL UPDATE语句,改变了表Mytable中所有记录的值。Execute方法带有两个参数。第一个参数是RecordAffe cted参数。在这个例子中,变量HowMany被作为RecordAffected参数。这个SQL语句执行后,变量HowM any中将存有该语句所操作的记录数。例如,如果表中有32条记录被更新,变量HowMany的值将是32。

上例中Execute方法的第二个参数是Options参数。在这个例子中,Options参数被指定为常量adCMDText 。这个常量用来告诉ADO,它应该把字符串的内容解释为命令文本,而不是一个表的名字或一个存储过程。通过告诉ADO被执行的字 符串的内容的有关信息,这个常量使得ADO更高效地执行这个命令。(要了解命令的更多信息,请参见第24章「使用命令」。)

你可以使用下面的常量作为Options参数:

 


adCMDTable。被执行的字符串包含一个表的名字。


adCMDText。被执行的字符串包含一个命令文本。


adCMDStoredProc。被执行的字符串包含一个存储过程名。


adCMDUnknown。不指定字符串的内容。(这是缺省值。)

 

在你能够在一个ASP网页中使用这些常量之前,你必须先包含一个名为ADOVBS.inc的特殊文件。文件ADOVBS.inc 中包含ADO使用的所有VBSript常量。上例中第一行的INCLUDE语句包含了文件ADOVBS.inc。

在你安装ASP时,这个文件应该已经被自动安装了。一般来说,它会被安装在c:\Program Files\Common Files\System\ADO目录下。但是,你也许不得不使用WINDOWS NT任务栏中的Find命令,找到这个文件的确切位置,找到它之后,把这个文件拷贝到你的Active Sever Pages目录中。

 

注意

如果你使用Jscript,而不是VBSript,ADO常量的包含文件应该是ADOJAVAS.inc。

 

打开一个连接后,你需要调用Execute方法多少次,你就可以调用多少次。

例如,下面的脚本向表Mytable中输入了32个字符串:

 

<!--#INCLUDE VIRTUAL=」ADOVBS.inc」-->

<%

Set MyConn=Sever.CreateObject(「ADODB.Connection」)

MyConn.Open 「FILEDSN=d:\Program Files\

Common Files\ODBC\Data Sources\MyData.dsn」

FOR i=1 TO 32

MySQL=」INSERT Mytable (Mycolumn) VALUES (『 This is entry 「&i&」 』)」

MyConn.Execute MySQL, HowMany,adCMDText

NEXT

MyConn.Close

%>

 

这段脚本使用了一个FOR……NEXT循环,向表Mytable中插入了32条记录。变量MySQL包含Execute方法使用 的SQL命令字符串。注意书写SQL字符串时如何使用单引号和双引号。单引号用来标记SQL语句内部的引用。双引号用来指定VB Sript内字符串的开始和结束。

用Execute方法几乎可以这些所有的SQL命令。例如,下面的脚本创建了一个表,然后添加数据,清除数据,最后删除这个表:

 

<!--#INCLUDE VIRTUAL=」ADOVBS.inc」-->

<%

Set MyConn=Sever.CreateObject(「ADODB.Connection」)

MyConn.Open 「FILEDSN=d:\Program Files\

Common Files\ODBC\Data Sources\MyData.dsn」

『 create a new table

MySQL=」CREATE TABLE newtable (mycolumn VARCHAR(255))」

MyConn.Execute MySQL

『 populate the table

MySQL=」INSERT newtable (mycolumn) VALUES(『hello』)」

MyConn.Execute MySQL

『truncate the table

MySQL=」TRUNCATE TABLE newtable」

MyConn.Execute MySQL

『drop the table

MySQL=」DROP TABLE newtable」

MyConn.Execute MySQL

Myconn.Close

%>

 

创建事务处理

当一组语句构成一个事务处理时,如果一个语句没有执行成功,则所有的语句都不成功。如果你需要更新多个表中的数据,你不希望对一 个表的操作失败,而对其它表的操作成功了。这时所有事务处理是有用的。

例如,假设某个时间有人在你的站点上买了东西,有关的交易信息存储在两个表中 。一个表用来保存买者的信用卡信息,另一个表包含了要买的商品的信息。

现在,假如有一个人正试图从你的站点上买东西。他的信用卡号码已经输入了第一个表中。但是,就在这时,发生了意外情况,一道闪电 击中了你的服务器,使第二个表没有被更新。在这种情况下,当然最后是两个表都没有被更新过。你当然不想收这个人的钱去买他不想买 的东西。使用事务处理,你可以防止第二个表没有被更新而第一个表被更新的情况出现:

 

<%

Set MyConn=Sever.CreateObject(「ADODB.Connection」)

MyConn.Open 「FILEDSN=d:\Program Files\

Common Files\ODBC\Data Sources\MyData.dsn」

MyConn.BeginTrans

MyConn.Execute 「INSERT CreditCard (CCNum) VALUES (『5555-55-444-44-4444』)」

MyConn.Execute 「INSERT Shipping (Address) VALUES(『Paris,France』)」

MyConn.CommitTrans

MyConn.Close

%>

在这个例子中,用BeginTrans方法和CommitTrans方法来标记事务处理的开始和结束。在BeginTrans方 法被调用之后,CommitTRans方法被调用之前,不管出现什么错误,两个表都不会被更新。

你也可以恢复一个事务处理的操作(操作作废)。要做到这一点,应使用RollBackTrans方法。考虑如下的脚本:

 

<%

Set MyConn=Sever.CreateObject(「ADODB.Connection」)

MyConn.Open 「FILEDSN=d:\Program Files\

Common Files\ODBC\Data Sources\MyData.dsn」

MyConn.BeginTrans

MyConn.Execute 「INSERT CreditCard (CCNum) VALUES (『5555-55-444-44-4444』)」

MyConn.Execute 「INSERT Shipping (Address) VALUES(『Paris,France』)」

IF WEEKDAYNAME(WEEKDAY(DATE))=」Sunday」 THEN

MyConn.RollBackTrans

ELSE

MyConn.CommitTrans

END IF

MyConn.Close

%>

 

在这个例子中,使用了RollBackTrans方法,如果是星期天,就取消事务处理所做的操作。在星期天两个表都不能被更新。

 

 

总结

这一章介绍了Activex数据对象。第一节是ADO的概述。在第二节,你学会了如何配置服务器以使用ADO。最后,向你介绍了 最重要的ADO对像之一:连接对象。

Back to Top 查看 erisa's 资料 搜索其它贴子 erisa 访问 erisa's
 

如果你想回复的话你必须首先 login
如果你还没有注册的话你必须首先 注册

  回复发表新主题
显示可打印的页面 显示可打印的页面

论坛跳转
不能 张贴新论题在这个讨论版
不能 回应论题在这个讨论版
不能 删除你的发言在这个讨论版
不能 编辑你的发言在这个讨论版
不能 新增投票标题在这个讨论版
不能 在这个讨论版投票

Edit by doreme Forums version 2004
Welcome ©2001-2004 doreme Guide

This page was generated in 0.1875 seconds.

 
保养品
保养品, Skin Care
www.elady.tw
美材批发
美材, Cosmetic
www.elady.tw/beauty_org
保养品批发
名牌保养品、保养品批发
gb.perfume.com.tw/skincare
饰品批发
饰品、饰品批发
gb.perfume.com.tw/ornament