【数据库】游标及应用

游标是数据库管理系统中用于对查询结果进行逐条处理的机制。本文介绍了游标的概念、使用过程、分类以及如何声明、打开、提取数据、关闭和删除游标。通过实例展示了如何利用游标进行数据更新和删除操作,强调了游标在处理实时性和效率要求高的场景中的优势。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

概念

游标 cursor是对以前查询结果一条一条记录处理的机制。

查询select的结果是一个视图,也是一条条地从数据库/视图提取出来的,呈现在用户面前时是个二维关系表,用户无法直接再一条一条地处理。

例:要把第一个同学的姓名改为张三四,把三个同学的生日提前3天,把第四个同学的身高减少1厘米。老办法,使用个独立不相干的UPDATE命令实现,如果是前后台的软件,连接操作数据库三次,效率特别低。如果使用游标,一次操作就完成,而且如果再在过程中使用游标,效率是最高的,前后联系,消息传递一次搞定。如果使用游标来解决上面问题,游标是数据库管理系统内部的操作,与第三方其它语言无关,在过程代码中实现,可动态操作数据,保证实时性。

实例:如前台输入姓氏,后台使用C#查询该姓的所有人,再把查询的这些的人的姓名,性别,生日,身高返回给前台展示.

(1) 直接使用C#的服务器控件,通过文本框输入姓氏,c#连接数据库sqlserver实现查询,把查询结果放在dataset中,再从dataset去读取记录行,最后response.write输出到前台的浏览器中.

(2) 前台使用纯html控件文本框,输入姓氏后,把姓氏值以ajax方式提交到后台,使用C#后台程序去连接数据库实现查询,把查询结果放在dataset中,再从dataset中读取记录行,把这些记录行凑成一个以指定字符间隔的字符串或集合JOSN,再以ajax不刷新方式传输给前台。前台ajax接收到数据,再拆开这些数据,显示在浏览器。

(以上两种方法,后者是使用html+jquery+ajax+sqlserver+c#/java方式,整个过程是不刷新,效率比较高。前者使用C#+sqlserver,效率较低,重复加载/显示数据时要刷新,的有服务器控件到达前台时要转换为HTML控件再显示在浏览器中。(后台的文本框控制textbox1,它要显示在用户端浏览器时要转换为html控件<input type='text'>

(3) 最理想的方法,目前较流行的方法:前台使用纯html控件文本框,输入姓氏后,把姓氏值以ajax方式提交到后台,使用C#后台程序去连接数据库实现查询.在sqlserver中编写一个过程/函数,接收姓氏值,在过程中使用游标,去访问该姓名的所有人,把这些人的姓名,性别,生日,身高数据连接成一个串,最后把结果串返回给调用处。如果使用datareader,连dataadpater都不要了. 然后C#把这个长的串ajax方式回传给前台,前台再来拆分这些数据和显示出来.

此法目前比较优化的,最麻烦的工作是前台浏览器和sqlserver中,C#/JAVA负担相对轻得多,更适合编写实时效率要求高的软件。此法有一个最大特点:用户端见的东西是纯HTML,不需要控件在C#与HTML相互转换,前台浏览器的内容改变也不会自动刷新,

游标是对查询结果逐条操作,主要包含两个方面的内容:

(1)游标结果集:它就是对应select命令产生的视图(结果集)[有点类似于早期学的C#中的datareader,也是记录集概念]

(2)游标当前指针:游标指针初始是指向结果集的首行,指向哪一行就可以操作哪一行,而且可以随意拔动指针到指定行,支持对当前行进行数据读和写的。

可见,以前datareader, dataset中很多操作可以使用游标来完成的。

游标使用过程

在这里插入图片描述

引例:编写一个函数,使用动态游标返回李大方的性别和生日,不允许通过游标修改任何数据。

create function getbirth1() returns varchar(50)
as 
begin
 declare @birth smalldatetime,@sex nchar(2),@result varchar
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

zhugenmi

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值