ADO 使用详解.docx

上传人:b****5 文档编号:30752905 上传时间:2023-08-20 格式:DOCX 页数:50 大小:37.58KB
下载 相关 举报
ADO 使用详解.docx_第1页
第1页 / 共50页
ADO 使用详解.docx_第2页
第2页 / 共50页
ADO 使用详解.docx_第3页
第3页 / 共50页
ADO 使用详解.docx_第4页
第4页 / 共50页
ADO 使用详解.docx_第5页
第5页 / 共50页
点击查看更多>>
下载资源
资源描述

ADO 使用详解.docx

《ADO 使用详解.docx》由会员分享,可在线阅读,更多相关《ADO 使用详解.docx(50页珍藏版)》请在冰豆网上搜索。

ADO 使用详解.docx

ADO使用详解

Activex数据库组件

Activex数据对象概述

使用Activex数据对象(ADO),你可以对来自许多种数据提供者的数据进行读取和写入操作。

例如,你可以使用ADO来访问MicrosoftAccess,MicrosoftSQL和Oracle数据库中的信息。

你甚至可以使用ADO从MicrosoftExcel表格中读取信息。

在这本书里,你将学习如何使用ADO操作MicrosoftSQLSever数据库。

所有的例子都假定你是在使用这种数据库。

但是,你应该知道,你在下面几章中学到的大部分内容对其它类型的数据库也是适用的。

在第三部分“操作数据:

SQL”中,你学习了如何适用结构化查询语言(SQL)。

从这一章开始,你将很好地应用第三章所学的知识。

学习的重点是结合ADO,使用SQL对一个数据库进行读写操作。

ADO和SQL的的这种结合是功能很强大的。

注:

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

Activex数据对象共有七种独立的对象。

下面列出了这七种对象的名字,并简要介绍了它们的功能:

连接对象:

代表与一个数据源的唯一对话。

例如,你可以用连接对象来打开一个对

MicrosoftSQLSever的连接。

记录集对象:

代表来自一个数据提供者的一组记录。

例如,你可以用一个记录集对象来

修改一个SQLSever表中的记录。

域对象:

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

命令对象:

代表一个命令。

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

查询。

参数对象:

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

属性对象:

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

错误对象:

代表ADO错误。

 

使用Activex数据对象

这一节将一步一步地引导你在你的ASP网页中使用ADO。

首先你将学习如何配置你的服务器以使用ADO。

接着,在下一节提供了一个简单的例子,演示如何使用ADO对数据库进行

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

这一节给出了一个如何使用ADO对MicrosoftSQLSever数据库进行读写操作的例子。

举这个例子有两个目的:

它演示了从ASP网页中访问MicrosoftSQLSever的基本方法,而且你可以用这个例子检测服务器的配置是否正确。

表22.1所示的网页把文本“HelloWorld!

”插入一个表中,然后,从表中取出这个文本并显示在浏览器中。

表22.1HelloWorld!

ADO_Example

<%

SetMyConn=Server.CreateObject("ADODB.Connection")

Constr="FILEDSN=d:

\ProgramFiles\CommonFiles\ODBC\DataSources\MyData.dsn"

Myconn.openconstr

MyConn.Execute"INSERTMyTable(MyColumn)VALUES('HelloWorld!

')"

SetRS=MyConn.Execute("SELECT*FROMMyTable")

Response.Write(RS("MyColumn"))

MyConn.Close%>

在使用这个例子之前,你需要建立一个名为Mytable的表。

你可以使用ISQL/w来创建它。

启动这个程序,选择你的缺省数据库,然后执行如下的SQL语句:

CREATETABLEmytable(mycolumnVARCHAR(255))

这个网页的第一行创建了连接对象的一个实例。

接下来调用连接对象的open方法,打开了一个对数据库的连接。

在open方法中用到了你在上一节所建立的数据源,以建立对数据库的连接。

(用你的计算机中的实际路径代替这个脚本中文件数据源的路径。

一旦打开了一个连接,你就可以用这个连接执行SQL语句。

在这个例子中,用Execute方法执行了两个SQL语句。

首先,用SQLINSERT语句把字符串“HelloWorld!

”输入到了数据库中。

然后用SQLSELECT语句从表中取出了这个字符串。

如果你的系统配置正确,字符串“HelloWorld!

”将会显示在浏览器窗口中。

该字符串先被插入数据库,又被取出并显示。

如果有什么不正常,请参看下一节。

 

调试Activex数据对象

如果你用ADO访问MicrosoftSQLSever时出现问题,这一节将对你有所帮助。

许多原因会导致上一节中所示的ASP网页执行失败。

下面列出了你通常会遇到的一些问题的症状以及可能的原因:

症状:

出现错误信息Unabletocreatefilebuffer.

原因:

文件数据源不正确。

如果文件数据源的路径或名字有误,或者该数据源不存在,你就会收到这个错误信息。

你应确保网页中open方法所使用的文件数据源的路径与你计算机中的实际路径相同。

症状:

出现错误信息Invalidobjectname‘mytablw’

原因1:

数据库中不存在表’mytable’。

按照上一节中所讲的方法用ISQL/w创建这个表

原因2:

mytable不在缺省数据库中。

你需要指定一个缺省数据库。

选择Start|Settings|ControlPanel。

单击ODBC图标,然后单击FileDSN标签。

选择你的文件数据源的名字,单击Configure,再单击Options。

在对话框中指定你的确省数据库的名字。

症状:

出现错误信息Theseverappearstobenotavailable

原因:

SQLSever没有运行。

从MicrosoftSQLSever程序组中选择SQLSeviceManager。

选择MSSQLSEVER并单击绿灯。

症状:

出现错误信息Loginfailed。

原因:

你没有使用WINDOWSNT确认模式。

建立数据源时输入了错误的帐号和口令。

选择Start|Settings|ControlPanel。

单击ODBC图标,然后单击FileDSN标签。

选择你的文件数据源的名字并单击Configure。

你可以选择UseTrustedConnection,或输入合法的帐号和口令。

症状:

出现错误信息INSERTpermissiondeniedonobjectmytable或

SELECTpermissiondeniedonobjictmytable。

原因:

建立数据源时指定的帐号没有访问表mytable的足够的权限。

你需要改变文件数据源的注册帐号,或者给该用户或用户组提供更多的权限。

要提供对一个表的更多权限,从MicrosoftSQLSever程序组中启动SQL事务管理器,找到表mytable并用右键点击它。

选择Permissions。

现在你可以为不同的用户或用户组设置对这个表的操作权限。

 

使用连接对象

与数据库的所通信都要通过一个打开的连接来进行。

在对一个数据库进行数据的插入和读取之前,必须先打开与这个数据库的连接。

这种打开和关闭一个连接的操作与打电话的过程有相似之处。

在你能够与SQLSever进行通信之前,你必须先呼叫它。

这一节讲如何使用ADO连接对象。

首先你将学习如何打开和关闭一个对数据库的连接。

接下来,你将学会如何通过一个打开的连接执行SQL语句。

最后,你将学习如何用连接对象创建事务处理。

 

打开和关闭数据库连接

要打开与一个数据库的连接,你可以创建连接对象的一个实例。

创建了这个实例之后,你就可以调用连接对象的open方法,打开一个连接。

这里有一个例子:

<%

SetMyConn=Sever.CreateObject(“ADODB.Connection”)

MyConn.Open“FILEDSN=d:

\ProgramFiles\CommonFiles\ODBC\DataSources\MyData.dsn”

MyConn.Execute“INSERTMytable(mycolumn)VALUES(‘HelloWorld!

’)”

MyConn.Close

%>

在这个例子中,创建了连接对象的一个实例MyConn。

然后调用连接对象的open方法。

接下来,调用连接对象的Execute方法,执行了一个SQL语句。

最后,关闭这个连接。

每次打开一个新连接时都要输入文件数据源的路径和名字,这实在是个另人厌烦的工作。

你可以把这个字符串分配给一个session变量或者在一个包含文件中把它定义为一个常量。

这样,你只需要键入一个变量名即可,而不必输入文件数据源的完整名称。

要定义一个包含有文件数据源名字的session变量,你可以在文件Global.asa中定义。

例如,你可以把下面的内容添加到文件Global.asa的session_onstart脚本中:

session(“connectionstring”)=”FILEDSN=d:

\ProgramFiles\Common

Files\ODBC\DataSources\MyData.dsn”

注:

要了解使用session变量的更多信息,请参阅第16章“使用ActiveSeverPagesSessions”。

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

<%

SetMyConn=Sever.CreateObject(“ADODB.Connection”)

MyConn.OpenSession(“connectionstring”)

%>

把文件数据源的名字分配给一个session变量的另一个好处是,你将来可以很容易地改变数据源。

如果你需要使用另外一个数据源,你只要改变文件Global.asa中的一个session变量的值即可。

使用完一个连接后,你应该关闭它。

这就象挂断一个电话,从而释放占用的线路。

连接对象的close方法可以关闭一个连接。

关闭了一个连接后,你就不能在用这个连接与数据库进行通信。

因此,依赖这个连接支持的其它对象也不能再与数据库相通信。

 

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

通过打开的连接执行SQL语句,要用到Execute方法。

这个方法有两种形式:

一种形式用来从数据库中返回信息,当不需要返回信息时,则使用另一种形式。

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

<%

SetMyConn=Sever.CreateObject(“ADODB.Connection”)

MyConn.Open“FILEDSN=d:

\ProgramFiles\CommonFiles\OBDC\DataSources\MyData.dsn”

MyConn.Execute“INSERTMytable(MyColumn)VALUES(‘HelloWorld!

’)”

MyConn.Close

%>

在这个例子中,用Execute方法执行了一个SQLSELECT语句。

因为没有返回结果,Execute方法不使用括号。

你也可以用Execute方法从一个查询返回结果。

如下例所示:

<%

SetMyConn=Sever.CreateObject(“ADODB.Connection”)

MyConn.Open“FILEDSN=d:

\ProgramFiles\CommonFiles\ODBC\DataSources\MyData.dsn”

SetRS=MyConn.Execute(“SELECT*FROMMytable”)

MyConn.Close

%>

在这个例子中,使用了Execute()方法以返回一个SQLSELECT查询的结果。

与上一个例子不同,这个Execute方法使用了括号。

当你要返回结果时,千万别忘了使用括号,否则你会收到错误信息Expectedendofstatement.

这个SQL查询的结果被读取到记录集对象的一个实例RS中。

该记录集由Execute()方法自动创建。

你将在下一章中学习如何使用记录集。

Execute方法包含两个可选参数。

你可以给一个RecordsAffected参数,用来保存被执行的SQL语句所操作的记录个数。

你还可以给一个Options参数,用来提供被执行的SQL语句的有关信息。

下面的例子同时使用了这两种可选参数:

--#INCLUDEVIRTUAL=”ADOVBS.inc”-->

<%

SetMyConn=Sever.CreateObject(“ADODB.Connection”)

MyConn.Open“FILEDSN=d:

\ProgramFiles\CommonFiles\ODBC\DataSources\MyData.dsn”

MyConn.Execute“UPDATEMytableSetMycolumn=’Goodbye!

’”,HowMany,adCMDText

Response.Write(HowMany)

MyConn.Close

%>

在这个脚本中,执行了一个SQLUPDATE语句,改变了表Mytable中所有记录的值。

Execute方法带有两个参数。

第一个参数是RecordAffected参数。

在这个例子中,变量HowMany被作为RecordAffected参数。

这个SQL语句执行后,变量HowMany中将存有该语句所操作的记录数。

例如,如果表中有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:

\ProgramFiles\CommonFiles\System\ADO目录下。

但是,你也许不得不使用WINDOWSNT任务栏中的Find命令,找到这个文件的确切位置,找到它之后,把这个文件拷贝到你的ActiveSeverPages目录中。

注:

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

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

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

--#INCLUDEVIRTUAL=”ADOVBS.inc”-->

<%

SetMyConn=Sever.CreateObject(“ADODB.Connection”)

MyConn.Open“FILEDSN=d:

\ProgramFiles\CommonFiles\ODBC\DataSources\MyData.dsn”

FORi=1TO32

MySQL=”INSERTMytable(Mycolumn)VALUES(‘Thisisentry“&i&”’)”

MyConn.ExecuteMySQL,HowMany,adCMDText

NEXT

MyConn.Close

%>

这段脚本使用了一个FOR……NEXT循环,向表Mytable中插入了32条记录。

变量MySQL包含Execute方法使用的SQL命令字符串。

注意书写SQL字符串时如何使用单引号和双引号。

单引号用来标记SQL语句内部的引用。

双引号用来指定VBSript内字符串的开始和结束。

用Execute方法几乎可以这些所有的SQL命令。

例如,下面的脚本创建了一个表,然后添加数据,清除数据,最后删除这个表:

--#INCLUDEVIRTUAL=”ADOVBS.inc”-->

<%

SetMyConn=Sever.CreateObject(“ADODB.Connection”)

MyConn.Open“FILEDSN=d:

\ProgramFiles\

CommonFiles\ODBC\DataSources\MyData.dsn”

‘createanewtable

MySQL=”CREATETABLEnewtable(mycolumnVARCHAR(255))”

MyConn.ExecuteMySQL

‘populatethetable

MySQL=”INSERTnewtable(mycolumn)VALUES(‘hello’)”

MyConn.ExecuteMySQL

‘truncatethetable

MySQL=”TRUNCATETABLEnewtable”

MyConn.ExecuteMySQL

‘dropthetable

MySQL=”DROPTABLEnewtable”

MyConn.ExecuteMySQL

Myconn.Close

%>

 

创建事务处理

当一组语句构成一个事务处理时,如果一个语句没有执行成功,则所有的语句都不成功。

如果你需要更新多个表中的数据,你不希望对一个表的操作失败,而对其它表的操作成功了。

这时所有事务处理是有用的。

例如:

假设某个时间有人在你的站点上买了东西,有关的交易信息存储在两个表中。

一个表用来保存买者的信用卡信息,另一个表包含了要买的商品的信息。

现在,假如有一个人正试图从你的站点上买东西。

他的信用卡号码已经输入了第一个表中。

但是,就在这时,发生了意外情况,一道闪电击中了你的服务器,使第二个表没有被更新。

在这种情况下,当然最后是两个表都没有被更新过。

你当然不想收这个人的钱去买他不想买的东西。

使用事务处理,你可以防止第二个表没有被更新而第一个表被更新的情况出现:

<%

SetMyConn=Sever.CreateObject(“ADODB.Connection”)

MyConn.Open“FILEDSN=d:

\ProgramFiles\CommonFiles\ODBC\DataSources\MyData.dsn”

MyConn.BeginTrans

MyConn.Execute“INSERTCreditCard(CCNum)VALUES(‘5555-55-444-44-4444’)”

MyConn.Execute“INSERTShipping(Address)VALUES(‘Paris,France’)”

MyConn.CommitTrans

MyConn.Close

%>

在这个例子中,用BeginTrans方法和CommitTrans方法来标记事务处理的开始和结束。

在BeginTrans方法被调用之后,CommitTRans方法被调用之前,不管出现什么错误,两个表都不会被更新。

你也可以恢复一个事务处理的操作(操作作废)。

要做到这一点,应使用RollBackTrans方法。

考虑如下的脚本:

<%

SetMyConn=Sever.CreateObject(“ADODB.Connection”)

MyConn.Open“FILEDSN=d:

\ProgramFiles\

CommonFiles\ODBC\DataSources\MyData.dsn”

MyConn.BeginTrans

MyConn.Execute“INSERTCreditCard(CCNum)VALUES(‘5555-55-444-44-4444’)”

MyConn.Execute“INSERTShipping(Address)VALUES(‘Paris,France’)”

IFWEEKDAYNAME(WEEKDAY(DATE))=”Sunday”THEN

MyConn.RollBackTrans

ELSE

MyConn.CommitTrans

ENDIF

MyConn.Close

%>

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

在星期天两个表都不能被更新。

 

使用记录集

用记录集显示记录

记录集可以用来代表表中的记录。

与表一样,一个记录集包含一条或多条记录(行),每个记录包括一个或多个域(字段)。

在任何时刻,只有一条记录是当前记录。

要创建记录集对象的一个实例,你可以使用连接对象的Execute()方法。

当你用Execute()方法从一个数据库返回查询结果时,一个记录集对象会被自动创建。

这里有一个例子:

<%

SetMyConn=Sever.CreateObject(“ADODB.Connection”)

MyConn.Open“FILEDSN=d:

\ProgramFiles\CommonFiles\ODBC\DataSources\MyData.dsn”

SetRS=MyConn.Execute(“SELECT*FROMMytable”)

RS.Close

MyConn.Close

%>

在这个例子中,使用一个SQLSELECT语句从一个表Mytable中返回了所有的记录。

Execute()方法返回一个记录集。

在这个脚本中,该记录集被分配给变量RS,然后关闭了这个记录集。

最后,关闭与数据库的连接。

记录集中的每一条记录都对应于表Mytable中的一条记录。

要显示记录集中的所有记录,你只要简单地做一个循环就可以,如下例所示:

<%

SetMyConn=Sever.CreateObject(“ADODB.Connection”)

MyConn.Open“FILEDSN=d:

\ProgramFiles\CommonFiles\ODBC\DataSources\MyData.dsn”

SetRS=MyConn.Execute(“SELECT*FROMMytable”)

WHILENOTRS.EOF

Response.Write(“
”&RS(“Mycolumn”))

RS.MoveNext

WEND

RS.Close

MyConn.Close

%>

在这个例子中,WHILE……WEND循环用来扫描记录集RS中的每一条记录,把每个记录的Mycolumn域输出到浏览器。

这段脚本显示了表Mytable中的所有记录。

当一个记录集对象中收集了数据时,当前记录总是第一条记录。

在上面的例子中,调用了记录集对象的MoveNext方法,使当前记录移到下一条记录。

当所有的记录都显示完时,记录集对象的EOF属性的值将变为true,从而退出WHILE……WEND循环。

一个记录集对象有一个域集合,包含一个或多个域对象。

一个域对象代表表

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 法律文书 > 起诉状

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1