ASP数据库操作大全.docx
《ASP数据库操作大全.docx》由会员分享,可在线阅读,更多相关《ASP数据库操作大全.docx(21页珍藏版)》请在冰豆网上搜索。
ASP数据库操作大全
ASP数据库操作大全
|提前阅读:
|
什么叫活动服务器组件(ActiveServerCompontents)?
组件是基于Activex技术的代码片断,通过指定接口提供指定的一组服务,组件供给客户端(Clients)在运行时候请求的对象。
你可以理解成组件是一种程序,通过调用这种程序,你可以实现你在ASP程序中无法实现或者很难实现的功能,组件是一种很好的代码重用方法。
我们可以运用ActiveServerPages设计制作动态、交互的Web页面,但是一旦你开始着手工作,参与一些实际工作的时候,你会发现asp在某些方面功能不强,甚至不借助服务器端组件就很难实现某些功能,例如:
数据库操作(我们通常使用ADO,ADO就是一个组件),邮件功能,文件系统操作,图形功能...但是幸运的是我们可以找到很多组件来提高ASP编程应用能力,在下面的内容我们将系统的介绍有关的组件,在下一章里面我们还将详细介绍如何亲自动手编写组件。
活动服务器组件的调用方法
服务器组件和ASP内置对象应用程序(Application)、会话(Session)、请求(Request)、响应(Response)和服务器对象不同,不能直接使用,而必须首先被实例化。
CreateObject函数创建一个对象并返回一个对对象的引用。
这个函数的语法如下:
SetobjVar=Server.CreateObject(class)
Class表示创建什么样的对象
Class的格式如下显示:
application.className
其中application是应用程序的名字,className是这种对象的名字。
一个application可以由一个或者多个对象组成。
他们可以在内部之间相互调用的。
例如
SetmyConnection=Server.Createobject("AdoDB.Recordset")
注意:
不能这样创建的Asp内建对象的实例,如下面的例子将导致一个错误
<%SetResponse=Server.CreateObject("Response")%>
你可以就通过在你的ASP脚本中使用活动服务器端组件,创建动态,交互的Web页面
|存取数据库|
附
1.早期的数据库连接是非常困难的.因为各种数据库的格式都不一样,开发者得对他们所开发的每种数据库的底层API必须有深刻的了解.因此,能处理各种各样数据库的通用的API就应运而生了-―ODBC(OpenDatabaseConnectivity),ODBC是人们在创建通用API的早期产物。
在程序中可以使用相同的代码访问不同的数据产品,因此有许多种数据库(如:
Access,MS-SQLServer,Oracle,Informix等.)遵从了这种标准,被称为ODBC兼容的数据库.ODBC的具体作用如图所示:
一般,odbc是由一套扩展的dll(dynamic link library动态链接库)组成,dll提供了标准的数据库应用程序设计接口。
而odbc是建立在标准化的sql(structuredQueryLanguage,结构化查询语言)之上。
所以通过odbc和sql,就可以编写独立于任何数据库产品的数据访问程序。
2、用odbc连接数据库:
odbc中提供三种dsn,它们的区别很简单:
用户dsn只能用于本用户。
系统dsn和文件dsn的区别只在于连接信息的存放位置不同:
系统dsn存放在odbc储存区里,而文件dsn则放在一个文本文件中。
在asp中使用它们时,写法如下:
A.链接sqlserver:
用系统dsn:
connstr="DSN=dsnname;UID=xx;PWD=xxx;DATABASE=dbname"
用文件dsn:
connstr="FILEDSN=xx;UID=xx;PWD=xxx;DATABASE=dbname"
还可以用连接字符串(从而不用再建立dsn):
connstr="DRIVER={SQLSERVER};SERVER=servername;UID=xx;PWD=xxx"
B.链接access:
用系统dsn:
connstr="DSN=dsnname"
(或者为:
connstr="DSN=dsnname;UID=xx;PWD=xxx")
用文件dsn:
connstr="FILEDSN=xx"
还可以用连接字符串(从而不用再建立dsn):
connstr="DRIVER={MicrosoftAccessDriver};DBQ=d:
\abc\abc.mdb"
3、缺陷:
ODBC含有大量的低级的调用,因此开发ODBC应用程序还比较困难.开发者不得不将大量的精力花在底层的数据库通信中,而不能专注于他们所要处理的数据.
OLEDB
多年以来,ODBC已成为访问客户端/服务器数据库的标准。
ODBC提供了基于标准的接口,接口要求SQL处理功能,并被优化用于基于SQL的方法。
然而,如果要访问不使用SQL的非关系数据源(例如,不按照关系存储数据的MicrosoftExchangeServer)中的数据,情况会如何呢?
进入OLEDB。
OLEDB建立于ODBC之上,并将此技术扩展为提供更高级数据访问接口的组件结构。
此结构对企业中及Internet上的SQL、非SQL和非结构化数据源提供一致的访问。
(实际上,在访问基于SQL的数据时,OLEDB仍使用ODBC,因为对于SQL它是最优结构。
)
OLEDB由三个组件构成:
数据使用者(例如,一个应用程序);包含并公开数据的数据提供程序以及处理并传输数据的服务组件(例如,查询处理器、游标引擎)。
OLEDB是一个针对SQL数据源和非SQL数据源(例如,邮件和目录)进行操作的API。
OLEDB为C和C++程序员及使用其他包含C样式函数调用语言的程序员提供绑定。
有一些语言(例如VB和VBScript)不提供指针数据类型(地址变量)。
因此,这些语言不能使用C样式绑定,而且不能直接调用OLEDB。
它实际上包涵了Microsoft Jet数据库引擎,这是一个由Microsoft Access所使用的引擎,并允许应用程序开发者通过ODBC象直接链接到其它数据库一样,直接链接到Access表,当然也可以访问SQL SERVER数据库。
Dao最适用于单系统应用程序或小范围本地分布使用。
在此基础上,Microsoft推出了另一个数据访问对象模型:
ADO(第一个是DAO)。
ADO采用基于DAO和RDO的对象,并提供比DAO和RDO更简单的对象模型(尽管会产生一些冗余的功能,如现在进行一项操作时可以用不止一种方法)。
ADO中的对象层次结构比DAO中的更平缓。
ADO包含一些简化对数据存储区数据的访问任务的内置对象。
而DAO是第一个面向对象的接口,DAO模型是设计关系数据库系统结构的对象类的集合。
它们提供了完成管理一个关系型数据库系统所需的全部操作的属性和方法,这其中包括创建数据库,定义表、字段和索引,建立表间的关系,定位和查询数据库等。
应用程序连接到数据库可采取的许多途径。
例如,VB程序员可以使用ADO将应用程序连接到OLEDB提供程序。
如果数据库不支持OLEDB,应用程序可以通过ODBC连接。
VisualC++(VC++)程序员可以使用ADO或直接通过OLEDB连接。
这里有microsoft,数据访问技术的演变
附end
在ASP中,用来存取数据库的对象统称ADO对象(ActiveDataObjects)
ADO包括的七个对象:
●Command:
定义对数据源进行操作的命令;
●Connection:
建立一个数据源的连接;
●Error:
提供数据访问错误的细节;
●Field:
表示一般数据类型的字段;
●Parameter:
表示Command对象的参数;
●Property:
表示由数据源定义ADO对象的动态特性;
●Recordset:
数据库命令结果集对象。
主要对象有三种:
Connection、Recordset和Command,其中Connection负责打开或连接数据库,Recordset负责存取数据表,Command负责对数据库执行行动查询(ActionQuery)命令和执行SQLServer的StoredProcedure。
只依靠这三个对象还是无法存取数据库的,还必须具有数据库存取的驱动程序:
OLEDB驱动程序和ODBC驱动程序。
对于任何一种数据库都必须有相对应的OLEDB驱动程序和ODBC驱动程序,ADO对象才能对数据库进行存取。
附:
通过ADO访问数据库的基本步骤通常都是以下五步:
●创建数据库链接
●创建数据对象
●操作数据库
●关闭数据对象和链接
附end
|创建数据库链接|
连接各数据库可以使用驱动程序,也可以使用数据源(dns方式),不过我建议大家使用驱动程序,因为使用驱动程序非常方便、简单,而使用数据源比较麻烦。
下表有一定基础的朋友应该可以看懂.我们常用的数据库都不会有密码,所以下面的验证方面的参数可以省略.
但一个链接的完成最起码应该有两个内容:
驱动程序及数据库位置
(dns方式生成的文件就包含了这两个内容).
|数据库链接实例:
|
1.
我们在一般情况下使用Access的数据库比较多,在这里我建议大家连接Access数据库使用下面的方法:
dimconn
setconn=server.createobject("adodb.connection")
conn.open="provider=microsoft.jet.oledb.4.0;"&"datasource="&server.mappath("../db/bbs.mdb")
其中../db/bbs.mdb是你的数据库存放的相对路径!
如果你的数据库和ASP文件在同一目录下,你只要这样写就可以了:
dimconn
setconn=server.createobject("adodb.connection")
conn.open="provider=microsoft.jet.oledb.4.0;"&"datasource="&server.mappath("bbs.mdb")
有许多初学者在遇到数据库连接时总是会出问题,然而使用上面的驱动程序只要你的数据库路径选对了就不会出问题了。
2.
1.建立MdbRecordset对象。
MDB数据库是一个完整的数据库,内部可能含有若干个数据表,在此函数中,Connection的作用是连接数据库,Recordset的作用是打开数据表。
FunctionCreateMdbRecordset(数据库文件名,数据表名或Select语句)
Dimconn,Provider,DBPath
’建立Connection对象
Setconn=Server.CreateObject(“ADODB.Connection”)
Provider=“Provider=Microsoft.Jet.OLEDB.4.0;”
DBPath=“DataSource=”&Server.MapPath(“数据库文件名”)
’打开数据库
conn.OpenProvider&DBPath
SetCreateMdbRecordset=Server.CreateObject(“ADODB.Recordset”)
’打开数据表
CreateMdbRecordset.Open“数据表名”,conn,2,2
EndFunction
2.建立带密码的MDB数据库的Recordset对象。
它的建立方式与建立不带密码的MDB数据库的Recordset对象类似,只是多了一个密码参数,即在与数据库连接时,必须给出密码信息。
FunctionCreateSecuredMdbRecordset(数据库文件名,数据表名或Select语句,password)
Dimconn,Provider,DBPath
’建立Connection对象
Setconn=Server.CreateObject(“ADODB.Connection”)
Provider=“Provider=Microsof.Jet.OLEDB.4.0;”
DBPath=“DataSource=”&Server.MapPath(“数据库文件名”)
’连接数据库,注意要带有密码参数
conn.OpenProvider&DBPath&“JetOLEDB:
DatabasePassword=”&assword
SetCreateSecuredMdbRecordset=Server.
CreateObject(“ADODB.Recordset”)
’打开数据表
CreateSecuredMdbRecordset.Open“数据表名”,conn,2,2
EndFunction
附:
Rs.opensql,conn,A,B的A、B各代表什么?
RS.OPEN SQL,CONN,A,B
A:
ADOPENFORWARDONLY(=0) 只读,且当前数据记录只能向下移动
ADOPENSTATIC(=3) 只读,当前数据记录可自由移动
ADOPENKEYSET(=1) 可读写,当前数据记录可自由移动
ADOPENDYNAMIC(=2) 可读写,当前数据记录可自由移动,可看到新增记录
B:
ADLOCKREADONLY(=1) 默认值,用来打开只读记录
ADLOCKPESSIMISTIC(=2) 悲观锁定
ADLOCKOPTIMISTIC(=3) 乐观锁定
ADLOCKBATCHOPTIMISTIC(=4) 批次乐观锁定
PS:
乐观锁定:
完全依靠数据库来管理锁的工作。
悲观锁定:
应用程序自己管理数据或对象上的锁处理
(下面介绍recordeset的时候有更详细的解释).
附end
SQL常用命令使用方法:
(1)数据记录筛选:
sql="select*from数据表where字段名=字段值orderby字段名[desc]"
sql="select*from数据表where字段名like'%字段值%'orderby字段名[desc]"
sql="selecttop10*from数据表where字段名orderby字段名[desc]"
sql="select*from数据表where字段名in('值1','值2','值3')"
sql="select*from数据表where字段名between值1and值2"
(2)更新数据记录:
sql="update数据表set字段名=字段值where条件表达式"
sql="update数据表set字段1=值1,字段2=值2……字段n=值nwhere条件表达式"
(3)删除数据记录:
sql="deletefrom数据表where条件表达式"
sql="deletefrom数据表"(将数据表所有记录删除)
(4)添加数据记录:
sql="insertinto数据表(字段1,字段2,字段3…)values(值1,值2,值3…)"
sql="insertinto目标数据表select*from源数据表"(把源数据表的记录添加到目标数据表)
(5)数据记录统计函数:
AVG(字段名)得出一个表格栏平均值
COUNT(*¦字段名)对数据行数的统计或对某一栏有值的数据行数统计
MAX(字段名)取得一个表格栏最大的值
MIN(字段名)取得一个表格栏最小的值
SUM(字段名)把数据栏的值相加
引用以上函数的方法:
sql="selectsum(字段名)as别名from数据表where条件表达式"
setrs=conn.excute(sql)
用rs("别名")获取统的计值,其它函数运用同上。
(5)数据表的建立和删除:
CREATETABLE数据表名称(字段1类型1(长度),字段2类型2(长度)……)
例:
CREATETABLEtab01(namevarchar(50),datetimedefaultnow())
DROPTABLE数据表名称(永久性删除一个数据表)
附上另一资料:
<>
掌握SQL四条最基本的数据操作语句:
Insert,Select,Update和Delete。
练掌握SQL是数据库用户的宝贵财富。
在本文中,我们将引导你掌握四条最基本的数据操作语句—SQL的核心功能—来依次介绍比较操作符、选择断言以及三值逻辑。
当你完成这些学习后,显然你已经开始算是精通SQL了。
在我们开始之前,先使用CREATETABLE语句来创建一个表(如图1所示)。
DDL语句对数据库对象如表、列和视进行定义。
它们并不对表中的行进行处理,这是因为DDL语句并不处理数据库中实际的数据。
这些工作由另一类SQL语句—数据操作语言(DML)语句进行处理。
SQL中有四种基本的DML操作:
INSERT,SELECT,UPDATE和DELETE。
由于这是大多数SQL用户经常用到的,我们有必要在此对它们进行一一说明。
在图1中我们给出了一个名为EMPLOYEES的表。
其中的每一行对应一个特定的雇员记录。
请熟悉这张表,我们在后面的例子中将要用到它。
INSERT语句
用户可以用INSERT语句将一行记录插入到指定的一个表中。
例如,要将雇员JohnSmith的记录插入到本例的表中,可以使用如下语句:
INSERTINTOEMPLOYEESVALUES
('Smith','John','1980-06-10',
'LosAngles',16,45000);
通过这样的INSERT语句,系统将试着将这些值填入到相应的列中。
这些列按照我们创建表时定义的顺序排列。
在本例中,第一个值“Smith”将填到第一个列LAST_NAME中;第二个值“John”将填到第二列FIRST_NAME中……以此类推。
我们说过系统会“试着”将值填入,除了执行规则之外它还要进行类型检查。
如果类型不符(如将一个字符串填入到类型为数字的列中),系统将拒绝这一次操作并返回一个错误信息。
如果SQL拒绝了你所填入的一列值,语句中其他各列的值也不会填入。
这是因为SQL提供对事务的支持。
一次事务将数据库从一种一致性转移到另一种一致性。
如果事务的某一部分失败,则整个事务都会失败,系统将会被恢复(或称之为回退)到此事务之前的状态。
回到原来的INSERT的例子,请注意所有的整形十进制数都不需要用单引号引起来,而字符串和日期类型的值都要用单引号来区别。
为了增加可读性而在数字间插入逗号将会引起错误。
记住,在SQL中逗号是元素的分隔符。
同样要注意输入文字值时要使用单引号。
双引号用来封装限界标识符。
对于日期类型,我们必须使用SQL标准日期格式(yyyy-mm-dd),但是在系统中可以进行定义,以接受其他的格式。
当然,2000年临近,请你最好还是使用四位来表示年份。
既然你已经理解了INSERT语句是怎样工作的了,让我们转到EMPLOYEES表中的其他部分:
INSERTINTOEMPLOYEESVALUES
('Bunyan','Paul','1970-07-04',
'Boston',12,70000);
INSERTINTOEMPLOYEESVALUES
('John','Adams','1992-01-21',
'Boston',20,100000);
INSERTINTOEMPLOYEESVALUES
('Smith','Pocahontas','1976-04-06',
'LosAngles',12,100000);
INSERTINTOEMPLOYEESVALUES
('Smith','Bessie','1940-05-02',
'Boston',5,200000);
INSERTINTOEMPLOYEESVALUES
('Jones','Davy','1970-10-10',
'Boston',8,45000);
INSERTINTOEMPLOYEESVALUES
('Jones','Indiana','1992-02-01',
'Chicago',NULL,NULL);
在最后一项中,我们不知道Jones先生的工薪级别和年薪,所以我们输入NULL(不要引号)。
NULL是SQL中的一种特殊情况,我们以后将进行详细的讨论。
现在我们只需认为NULL表示一种未知的值。
有时,像我们刚才所讨论的情况,我们可能希望对某一些而不是全部的列进行赋值。
除了对要省略的列输入NULL外,还可以采用另外一种INSERT语句,如下:
INSERTINTOEMPLOYEES(
FIRST_NAME,LAST_NAME,
HIRE_DATE,BRANCH_OFFICE)
VALUE(
'Indiana','Jones',
'1992-02-01','Indianapolis');
这样,我们先在表名之后列出一系列列名。
未列出的列中将自动填入缺省值,如果没有设置缺省值则填入NULL。
请注意我们改变了列的顺序,而值的顺序要对应新的列的顺序。
如果该语句中省略了FIRST_NAME和LAST_NAME项(这两项规定不能为空),SQL操作将失败。
让我们来看一看上述INSERT语句的语法图:
INSERTINTOtable
[(column{,column})]
VALUES
(columnvalue[{,columnvalue}]);
和前一篇文章中一样,我们用方括号来表示可选项,大括号表示可以重复任意次数的项(不能在实际的SQL语句中使用这些特殊字符)。
VALUE子句和可选的列名列表中必须使用圆括号。
SELECT语句
SELECT语句可以从一个或多个表中选取特定的行和列。
因为查询和检索数据是数据库管理中最重要的功能,所以SELECT语句在SQL中是工作量最大的部分。
实际上,仅仅是访问数据库来分析数据并生成报表的人可以对其他SQL语句一窍不通。
SELECT语句的结果通常是生成另外一个表。
在执行过程中系统根据用户的标准从数据库中选出匹配的行和列,并将结果放到临时的表中。
在直接SQL(directSQL)中,它将结果显示在终端的显示屏上,或者将结果送到打印机或文件中。
也可以结合其他SQL语句来将结果放到一个已知名称的表中。
SELECT语句功能强大。
虽然表面上看来它只用来完成本文第一部分中提到的关系代数运算“选