关于ADO中的游标类型- -
对Connection来说:
CursorLocation属性,包含光标服务程序的默认位置.这个值将由使用该Connection对象的Recordset对象自动继承.
常用的游标类型主要有2种:
adUseClient
使用由本地游标库提供的客户端游标。本地游标引擎通常允许使用的许多功能可能是驱动程序提供的游标无法使用的,因此使用该设置对于那些将要启用的功能是有好处的。adUseClientBatch与 adUseClient同义,也支持向后兼容性。
adUseServer
默认值。使用数据提供者或驱动程序提供的游标。这些游标有时非常灵活,对于其他用户对数据源所作的更改具有额外的敏感性。但是,Microsoft Client Cursor Provider(如已断开关联的记录集)的某些功能无法由服务器端游标模拟,通过该设置将无法使用这些功能。
补充说明:
使用adUseClient就是表示数据需要传输到客户端后再进行操作,不具有同步(加入执行查询后,在获取查询结果前,有另一个程序改变了数据库内的内容,客户端的结果是改变之前的数据)。它能更好的支持如RecordCount属性等功能(由于已经把全部数据传输到客户端,程序可以具体知道有多少条数据)。但这样对性能的影响比较大,如果数据很多,由于必须将数据全部执行完后,传送到客户端后在返回,性能影响更明显。
adUseServer是直接在数据库中操作,获取了指向数据的游标后就返回,处理的速度比较快,具体的数据在等到获取数据的时候(如调用MoveNext等方法)的时候再进行运算。在其他的很多方面adUesServer很有限制,如在对结果集进行遍历之前,程序无法知道结果集到底有多少条数据。
对RecordSet来说:
CursorType:
程序中常用第二种AdOpenKeyset,
AdOpenForwardOnly = 0 '只能用MoveNext读取,并且打开的同时建立的数据库的备份,不能即时体现数据库记录状态,比如记录的编辑和增删.
AdOpenKeyset = 1 '可上下滚动的游标,给打开的记录创建了一个关键字列表,类似记录集的描述,访问的时候才去取得数据值,就是说可以即时看到修改信息,但是不能即时得到数据是否删除的信息,因为这个关键字列表是事先初始化好的.
AdOpenDynamic = 2 '完全可滚动,可得到数据的最新状态,执行效率也会有所降低.
AdOpenStatic = 3 ' 完全可滚动,但是和adOpenKeyset类似,它先将数据库备份文件之后进行操作.可以断开数据库连接后继续使用.
ADO锁的类型有四种,在不需要对数据库数据进行更新的读取操作中,推荐使用AdLockReadOnly只读锁;当添加删除更新一条记录时,推荐使用AdLockPessimistic锁,防止你在更新一条记录时其他人操作相同的记录,或其他人同时录入不合法的重记录。比如用户名注册,在用户查重和提交新名称的过程中有间隔,防止在间隔期其他用户提交你已通过查重的合法名称,或录入两个相同名称。
AdLockReadOnly = 1'只读锁,不能操作记录
AdLockPessimistic= 2'悲观锁,操作者打开之后立即上锁,直到修改完成或者放弃修改为止,此时其他人无法编辑.
AdLockOptimistic= 3'乐观锁,当记录将要被更新的时候才开始上锁,但是不能保证在提交修改之前是否有人改动过.
AdLockBatchOptimistic= 4'批量乐观锁,SQL server中要使用它,必须打开一个可上下滚动的游标,如adOpenKeyset,adOpenStatic.
例(asp):
读取数据库时
set res=server.CreateObject("adodb.recordset")
res.open sql语句,数据库连接,1,1
更新数据库时
set res=server.CreateObject("adodb.recordset")
res.open sql语句,数据库连接,1,2
显示数据记录的三板斧
(就是ado控件和dataGrid相结合,他们就是一对男女朋友,很密切的)
Adodc1.CommandType = adCmdUnknown
Adodc1.RecordSource = strsql
Set DataGrid1.DataSource = Adodc1
Adodc1.Refresh
DataGrid1.Refresh