数据库

位置:IT落伍者 >> 数据库 >> 浏览文章

Sql中游标和加锁的问题分析与解答


发布日期:2020年11月14日
 
Sql中游标和加锁的问题分析与解答

<%

游标类型

Const adOpenForwardOnly =

Const adOpenKeyset =

Const adOpenDynamic =

Const adOpenStatic =

加锁类型

Const adLockReadOnly =

Const adLockPessimistic =

Const adLockOptimistic =

Const adLockBatchOptimistic =

>%

<% Set Conn = ServerCreateObject(ADODBConnection) >%

<% Set RSMov = ServerCreateObject(ADODBRecordSet) >%

<% ConnOpen 数据源名称 sa >%

<% RSMovOpen sqlMov Conn adOpenKeyset adLockReadOnly >%

游标使用时是比较灵活的它有时用来描述一个记录集有时又是用来描述当前记录集中某一条记录的指针游标主要是用来建立一个关系数据库中行/列关系的一种SQL可利用的访问格式与游标有关系的技术术语还有一个叫Bookmark的如果你选择的游标方式支持Bookmarks数据库将提供有关记录数目的强大功能

在上面写出的那么多游标方式中adOpenDynamic是没有太的用处的虽然它提供实时显示数据库中的记录的所有更新操作的功能但是因为并不是所有的数据库都支持该游标方式没有移植性的游标方式对当前错综复杂的数据库来说真是用处不大

在实际的编程中我相信大家使用得最频繁的是adOpenStatic方式当然这种方式的缺点是不能够就实时反应出数据库中内容改变时的状况如果要想看到数据库被其它用户改变的状况可使用adOpenKeyse方式(但是它只能够反应出被编辑的改变情况也就是说不能够反映出新增和删除记录的改变情况

其实上面的内容大家一般都可以在微软的技术参考资料中找到下面来说说在使用这些游标方式和加锁方式时要注意到的问题

首先要注意到的是这两种方式在混合使用时的问题就是说你同时设置游标方式和加锁方式除非你是在使用Access数据库一般而言当你混合使用时是并不能够得到你预期想要的游标方式和加锁方式的例如如果你同时将游标设置为adOpenStatic方式而将加锁设置为adLockOptimistic你将得不到adOpenStatic方式的游标你这时使用的游标方式将是adOpenKeyset也就是说你使用ADO的话它将返回adOpenKeyset的游标

其次游标和加锁的混合使用还会导致ADO返回的不是你想要的加锁方式ADO会改变你的加锁方式例如在默认状态下游标方式是adOpenForwardOnly在使用这种游标方式的同时如果你使用的加锁方式为(就是让数据源来判断加锁方式)或则adLockReadOnly那么这种混合方式基本上不支持RecordSet的任何方法也就是说RecordSet的任何方法将返回False(你的recordcountabsoultpageaddnewdeleteupdate等都会返回就是表示不支持该属性)但是这时如果你使用的是adOpenForwardOnly游标方式和其它的加锁方式混合它反而会支持填加删除和更新

上一篇:Whats new in Microsoft SQLServer2000(六)

下一篇:SQL Server 数据库连接字符串的声明