Chinaunix首页 | 论坛 | 博客
  • 博客访问: 29954694
  • 博文数量: 2065
  • 博客积分: 10377
  • 博客等级: 上将
  • 技术积分: 21525
  • 用 户 组: 普通用户
  • 注册时间: 2008-11-04 17:50
文章分类

全部博文(2065)

文章存档

2012年(2)

2011年(19)

2010年(1160)

2009年(969)

2008年(153)

分类: 系统运维

2010-01-27 23:44:33

ASP中的数据库操作专题

[整理人:hkebao@126.com 整理时间:2010-01-27]

一、连接数据库

以连接MSSQL2000为例进行整理。连接数据库的代码如下

Set conn = Server.CreateObject("ADODB.Connection")

conn.Open "DRIVER={SQL Server};SERVER=127.0.0.1;DATABASE=test;UID=sa;PWD=hkebao"

If conn Is Nothing Then

         response.write "conn is nothing"

         response.End()

End If

二、有关数据集操作说明

表结构如下:

CREATE TABLE [dbo].[t] (

         [id] [int] NULL ,

         [name] [char] (10) COLLATE Chinese_PRC_CI_AS NULL ,

         [pass] [char] (10) COLLATE Chinese_PRC_CI_AS NULL

) ON [PRIMARY]

执行插入、更新、删除操作

ADO中定义了四种游标类型:

1、   动态游标

用于查看其他用户所作的添加、更改和删除

2、   键集游标

其行为类似动态游标,不同的只是它禁止查看其他用户添加的记录,也禁止访问其他用户删除的记录,其它用户所作的数据更改还是可见。

3、   静态游标

提供记录集的静态副本,可用来查找数据或生成报告。其他用户所作的添加、更改或删除将不可见

4、   仅向前游标

只允许recordset中向前移动。其他用户所作的添加、更改或删除将不可见。当只需要对Recordset进行一次传递时可提高性能!

其中默认的游标类型为第四种类型

当打开RecordSet时,当前记录位于第一个记录(如果有),BOFEOF属性设置为False。如果没有记录BOFEOF属性设置为True

相关的操作方法如:movefirst movelast movenext moveprevious move absolutepage等重新给记录集定位。

确定记录集的移动范围可以用BOFEOF属性

ADO中的锁类型

1 锁定类型,默认的,只读,不能作任何修改
2
当编辑时立即锁定记录,最安全的方式
3
只有在调用Update方法时才锁定记录集,而在此前的其他操作仍可对当前记录进行更改、插入和删除等
4
当编辑时记录不会被锁定,而更改、插入和删除是在批处理方式下完成的

 

 

 

 

 

正确选择游标的位置、类型和锁方式
如果只需要按顺序读取记录并且不需要滚动和更新记录,最好使用服务器端游标 adUseServer)、仅向前游标(adOpenForwardOnly)和读加锁(adLockReadOnly),这样可以获得最好的性能。

果需要滚动记录,采用客户端游标(adUseServer)会比采用服务器端游标所得到的性能要好,因为ADO系统默认是采用服务器端游标类型。

当然如果 数据集合相当大,采用服务器端游标的性能会好一些

同时需要注意:如果采用客户端游标,最好只采用读加锁(adLockReadOnly)的锁类型,因为 如果需要更新数据,客户端游标引擎需要得到额外的信息(元数据),而获取这个信息的代价是非常昂贵的。

 

其中更新操作(insert update delete 可分为两种类型:立即更新、批更新

立即更新:一旦调用Update 方法,对数据的所作的更改会立刻写入基本数据源。也可用AddNew Update方法将值的数组作参数传递,同时更新记录中多个字段。

批更新:可将多个记录所作的更改存入缓存,然后用UpdateBatch方法在一次调用中将它们全部传送到数据库,一次全部更新过来!这种情况适用于AddNew Update Delete 进行的更改。调用UpdateBatch方法之后可用Status属性检查冲突并加以解决!

 

 

 

2.1 执行更新操作代码

增加记录的代码

<%

Set conn = Server.CreateObject("ADODB.Connection")

conn.Open "DRIVER={SQL Server};SERVER=127.0.0.1;DATABASE=test;UID=sa;PWD=hkebao"

If conn Is Nothing Then

         response.write "conn is nothing"

         response.End()

Else

         sql = "insert into t(name,pass) values('name','pass')"

         conn.execute(sql)

         conn.close()

         Set conn = nothing

End If                  直接写SQL语句

 

<%

Set conn = Server.CreateObject("ADODB.Connection")

Set rs          = Server.CreateObject("ADODB.RecordSet")

conn.Open "DRIVER={SQL Server};SERVER=127.0.0.1;DATABASE=test;UID=sa;PWD=hkebao"

If conn Is Nothing Then

         response.write "conn is nothing"

         response.End()

Else

         sql = "select * from t"

         rs.open sql,conn,1,2                        注意锁类型为2 如果为1则不成功

         rs.AddNew()

         rs("name") = "name"

         rs("pass") = "pass"

         rs.Update  

         conn.close()

         Set conn = nothing

End If

 

修改记录:

<%

Set conn = Server.CreateObject("ADODB.Connection")

Set rs          = Server.CreateObject("ADODB.RecordSet")

conn.Open "DRIVER={SQL Server};SERVER=127.0.0.1;DATABASE=test;UID=sa;PWD=hkebao"

If conn Is Nothing Then

         response.write "conn is nothing"

         response.End()

Else

         sql = "update t set name='a' where name='names'"

         conn.execute(sql)

         conn.close()

         Set conn = nothing

End If

也可用:

<%

Set conn = Server.CreateObject("ADODB.Connection")

Set rs          = Server.CreateObject("ADODB.RecordSet")

conn.Open "DRIVER={SQL Server};SERVER=127.0.0.1;DATABASE=test;UID=sa;PWD=hkebao"

If conn Is Nothing Then

         response.write "conn is nothing"

         response.End()

Else

         sql = "select * from t where name='a'"

         rs.open sql,conn,1,2

         rs("name") = "123"

         rs.Update  

         conn.close()

         Set conn = nothing

End If

 

删除记录

<%

Set conn = Server.CreateObject("ADODB.Connection")

Set rs          = Server.CreateObject("ADODB.RecordSet")

conn.Open "DRIVER={SQL Server};SERVER=127.0.0.1;DATABASE=test;UID=sa;PWD=hkebao"

If conn Is Nothing Then

         response.write "conn is nothing"

         response.End()

Else

         sql = "select * from t where name='name'"

         rs.open sql,conn,1,2

         rs.delete()

         conn.close()

         Set conn = nothing

End If

还可以:

<%

Set conn = Server.CreateObject("ADODB.Connection")

Set rs          = Server.CreateObject("ADODB.RecordSet")

conn.Open "DRIVER={SQL Server};SERVER=127.0.0.1;DATABASE=test;UID=sa;PWD=hkebao"

If conn Is Nothing Then

         response.write "conn is nothing"

         response.End()

Else

         sql = "delete from  t where name='names'"

         conn.execute(sql)

         conn.close()

         Set conn = nothing

End If

 

查询操作:

Set conn = Server.CreateObject("ADODB.Connection")

Set rs          = Server.CreateObject("ADODB.RecordSet")

conn.Open "DRIVER={SQL Server};SERVER=127.0.0.1;DATABASE=test;UID=sa;PWD=hkebao"

If conn Is Nothing Then

         response.write "conn is nothing"

         response.End()

Else

         Sql="Select * from t"

         rs.Open Sql,Conn,1,1

         If rs.EOF Then                                         表示数据库中没记录

                   Response.Write "错误,数据表中竟然没有记录"

         End If

         conn.close()

         Set conn = nothing

End If

 

 

 

 

<%

Set conn = Server.CreateObject("ADODB.Connection")

Set rs          = Server.CreateObject("ADODB.RecordSet")

conn.Open "DRIVER={SQL Server};SERVER=127.0.0.1;DATABASE=test;UID=sa;PWD=hkebao"

If conn Is Nothing Then

         response.write "conn is nothing"

         response.End()

Else

         Sql="Select * from t"

         rs.Open Sql,Conn,1,1

         If rs.EOF Then

                   Response.Write "错误,数据表中竟然没有记录"

         Else

                   While Not rs.eof                                     遍历数据集的方法

                            response.write rs("name")

                            rs.movenext                                     数据集遍历

                   wend

         End If

         conn.close()

         Set conn = nothing

End If

 

response.write rs.RecordCount                                  能够返回这个SELECT语句的记录条数

 

 

 

三、附Recordset 对象属性及方法

属性

描述

AbsolutePage

设置或返回一个可指定 Recordset 对象中页码的值。

AbsolutePosition

设置或返回一个值,此值可指定 Recordset 对象中当前记录的顺序位置(序号位置)。

ActiveCommand

返回与 Recordset 对象相关联的 Command 对象。

ActiveConnection

如果连接被关闭,设置或返回连接的定义,如果连接打开,设置或返回当前的 Connection 对象。

BOF

如果当前的记录位置在第一条记录之前,则返回 true,否则返回 fasle

Bookmark

设置或返回一个书签。此书签保存当前记录的位置。

CacheSize

设置或返回能够被缓存的记录的数目。

CursorLocation

设置或返回游标服务的位置。

CursorType

设置或返回一个 Recordset 对象的游标类型。

DataMember

设置或返回要从 DataSource 属性所引用的对象中检索的数据成员的名称。

DataSource

指定一个包含要被表示为 Recordset 对象的数据的对象。

EditMode

返回当前记录的编辑状态。

EOF

如果当前记录的位置在最后的记录之后,则返回 true,否则返回 fasle

Filter

返回一个针对 Recordset 对象中数据的过滤器。

Index

设置或返回 Recordset 对象的当前索引的名称。

LockType

设置或返回当编辑 Recordset 中的一条记录时,可指定锁定类型的值。

MarshalOptions

设置或返回一个值,此值指定哪些记录被返回服务器。

MaxRecords

设置或返回从一个查询返回 Recordset 对象的的最大记录数目。

PageCount

返回一个 Recordset 对象中的数据页数。

PageSize

设置或返回 Recordset 对象的一个单一页面上所允许的最大记录数。

RecordCount

返回一个 Recordset 对象中的记录数目。

Sort

设置或返回一个或多个作为 Recordset 排序基准的字段名。

Source

设置一个字符串值,或一个 Command 对象引用,或返回一个字符串值,此值可指示 Recordset 对象的数据源。

State

返回一个值,此值可描述是否 Recordset 对象是打开、关闭、正在连接、正在执行或正在取回数据。

Status

返回有关批更新或其他大量操作的当前记录的状态。

StayInSync

设置或返回当父记录位置改变时对子记录的引用是否改变。

方法

方法

描述

AddNew

创建一条新记录。

Cancel

撤销一次执行。

CancelBatch

撤销一次批更新。

CancelUpdate

撤销对 Recordset 对象的一条记录所做的更改。

Clone

创建一个已有 Recordset 的副本。

Close

关闭一个 Recordset

CompareBookmarks

比较两个书签。

Delete

删除一条记录或一组记录。

Find

搜索一个 Recordset 中满足指定某个条件的一条记录。

GetRows

把多条记录从一个 Recordset 对象中拷贝到一个二维数组中。

GetString

Recordset 作为字符串返回。

Move

Recordset 对象中移动记录指针。

MoveFirst

把记录指针移动到第一条记录。

MoveLast

把记录指针移动到最后一条记录。

MoveNext

把记录指针移动到下一条记录。

MovePrevious

把记录指针移动到上一条记录。

NextRecordset

通过执行一系列命令清除当前 Recordset 对象并返回下一个 Recordset

Open

打开一个数据库元素,此元素可提供对表的记录、查询的结果或保存的 Recordset 的访问。

Requery

通过重新执行对象所基于的查询来更新 Recordset 对象中的数据。

Resync

从原始数据库刷新当前 Recordset 中的数据。

Save

Recordset 对象保存到 file Stream 对象中。

Seek

搜索 Recordset 的索引以快速定位与指定的值相匹配的行,并使其成为当前行。

Supports

返回一个布尔值,此值可定义 Recordset 对象是否支持特定类型的功能。

Update

保存所有对 Recordset 对象中的一条单一记录所做的更改。

UpdateBatch

把所有 Recordset 中的更改存入数据库。请在批更新模式中使用。

 

 

 

 

 

 

 

阅读(1086) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~