Excel使用ADO调用SQL Server存储过程

前期使用Excel做一个现场投票的小软件,问题出在查看投票按钮上,起初只是使用SELECT语句查询,一切正常;后期对于投票结果需要进行一些权重的计算,过程比较复杂,便想到把计算过程放在SQL Server端,使用存储过程实现。但是,在调用存储过程的过程中却遇到了问题,一直无法返回记录集。最后发现问题出现在记录集的CursorLocation属性设置上,下面便把此问题的过程和解决方案提供如下,以免发生类似问题。
摘要由CSDN通过智能技术生成

测试环境:SQL Server 2014Excel 2013

Excel示例文件下载:http://download.csdn.net/detail/zhanghongju/8533555

前期在做一个现场投票的小软件,准备使用Excel实现,工作簿中包含有两个工作表,各包含一个命令按钮,分别用于提交和查看投票结果。

问题出在查看投票按钮上,起初只是使用SELECT语句查询,一切正常;后期对于投票结果需要进行一些权重的计算,过程比较复杂,便想到把计算过程放在SQL Server端,使用存储过程实现。但是,在调用存储过程的过程中却遇到了问题,一直无法返回记录集。最后发现问题出现在记录集的CursorLocation属性设置上,下面便把此问题的过程和解决方案提供如下,以免发生类似问题。

一、使用CursorLocation属性设置游标的区别

CursorLocation属性包含两个属性值:adUseClient(常量值为3)和adUseServer(常量值为2)。adUseClient表示使用由本地游标库提供的客户端游标,adUseServer是默认值,表示使用数据提供者的或驱动程序提供的游标。

adUseClient游标服务的功能通常更加强大一些,许多功能可能是驱动程序提供的游标无法提供的。但是,adUseServer游标具有高度的敏感性,可以看到其他用户对数据源所作的更改,对于一些多用户操作,该特性是具有优势的。也正是因为此特性,会导致记录集行数的具有不确定性,因此某些情况下是无法使用RecordCount属性获取记录集的行数,也无法使用EOFBOF判断是否到达记录集的尾部和头部。

二、在SQL Server中创建示例数据

下面的语句用于在SQL Server中创建两个表。dbo.MyScore用于存储评选人员ID、项目ID和评选分数,dbo.MyPerson用于存储评选人员ID和评选人员是否为专家的标志,标志为1,表示此评选人员为专家。

IF OBJECT_ID('dbo.MyScore') IS NOT NULL

   DROP TABLE dbo.MyScore;

IF OBJECT_ID('dbo.MyPerson') IS NOT NULL

   DROP TABLE dbo.MyPerson;

GO

 

CREATE TABLE dbo.MyScore(PersonID int, ProjectID int, ProjectScore int);

CREATE TABLE dbo.MyPerson(PersonID int, IsExpert int);

INSERT INTO dbo.MyScore VALUES

   (1, 1001, 90),

   (1, 1002, 80),

   (1, 1003, 95),

   (2, 1001, 85),

   (2, 1002, 85),

   (2, 1003, 90),</

  • 4
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值