全部博文(2065)
分类: 系统运维
2010-01-27 23:44:33
ASP中的数据库操作专题
[整理人:hkebao@126.com 整理时间:
一、连接数据库
以连接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时,当前记录位于第一个记录(如果有),BOF和EOF属性设置为False。如果没有记录BOF和EOF属性设置为True
相关的操作方法如:movefirst movelast movenext moveprevious
move absolutepage等重新给记录集定位。
确定记录集的移动范围可以用BOF与EOF属性
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
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
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 中的更改存入数据库。请在批更新模式中使用。 |