HRESULT _hr = get_adoEOF(&_result);

IsEOF()函数如下:其中ADOCG::_RecordsetPtr m_pRecordset;

BOOL IsEOF()       {return m_pRecordset->adoEOF == VARIANT_TRUE;};

m_pRecordset->adoEOF 将执行下面的函数(见msado15。tli)

1    inline VARIANT_BOOL Recordset15::GetadoEOF ( ) {

2         VARIANT_BOOL _result = 0;

        HRESULT _hr = get_adoEOF(&_result);

4         if (FAILED(_hr)) _com_issue_errorex(_hr, this, __uuidof(this));

5         return _result;

6     }

程序将在上述第三行代码处抛出异常。

经过查询网上的资料以及和同事一起研究发现。在存储过程中没有返回记录集的路径中增加一个SELECT TOP 0 0 创造一个空记录集返回也可避免该异常的发生。所以,存储过程中没有返回记录集是导致该问题的根本原因。

还有一种避免(仅仅是避免)该异常的方法是在执行完存储过程后,先使用如下代码来判断记录集是否已经打开

if (m_pRecordset->GetState() == ADOCG::adStateClosed)

return  FALSE;

else

return  TRUE;

如果记录集未打开,则直接通知上传调用模块不要再做记录集操作。

最后小结下该问题的处理方法。

1.程序调用存储过程时,是否返回记录集时由存储过程本身决定的。一般的我们首先使用SET NOCOUNT ON 来关闭计数,防止干扰我们通过SELECT语句返回我们期望的记录集。

2.从存储过程本身下手。保证设计为返回记录集的存储过程,必须在任何时候都有查询语句返回记录集。即使查询条件不符合也要返回一个空记录集。以保证存储过程的健壮性。

3.修改ADO封装类的函数:BOOL CADORecordset::Open(LPCTSTR lpstrExec)

在执行存储过程并返回记录集后,先检查记录集是否打开。如果未打开,则返回FALSE,通知上层程序,打开记录集出错。 应该进行相应的错误处理而不是继续操作记录集。

存储过程不返回记录集导致ADO程序出错的分析 - nscboy的专栏 - CSDN博客 http://blog.csdn.net/nscboy/article/details/4168777

存储过程不返回记录集导致ADO程序出错的更多相关文章

  1. Oracle 存储过程例子返回记录集

    转载:https://www.cnblogs.com/mikalshao/articles/1454134.html Oracle 不支持批量查询,因此无法从一个命令返回多个结果集.使用存储过程时,返 ...

  2. mybatis springmvc调用oracle存储过程,返回记录集

    参考: http://bbs.csdn.net/topics/390866155 辅助参考: http://www.2cto.com/kf/201307/226848.html http://blog ...

  3. 基于Spring Boot,使用JPA调用Sql Server数据库的存储过程并返回记录集合

    在上一篇<基于Spring Boot,使用JPA操作Sql Server数据库完成CRUD>中完成了使用JPA对实体数据的CRUD操作. 那么,有些情况,会把一些查询语句写在存储过程中,由 ...

  4. PB中用oracle的存储过程返回记录集做数据源来生成数据窗口,PB会找不到此存储过程及不能正常识别存储过程的参数问题(转)

    (转)在PB中用oracle的存储过程返回记录集做数据源来生成数据窗口 首先oracle的存储过程写法与MSSQL不一样,差别比较大. 如果是返回数据集的存储过程则需要利用oracle的包来定义游标. ...

  5. oracle创建存储过程并返回结果集(附C#调用代码)

    使用存储过程中,最常用的莫过于查询数据表,并返回结果集. 在SQL SERVER 中,这类操作最简单,通过简单的select * from xx 即可完成.但是在Oracle中并不支持这种写法,那么我 ...

  6. 现场故障-数据量超出plsql developer结果集导致应用程序无数据现象

    情景重现: 维护人员想要用plsql developer工具查看一年前某表的数据,表中数据约30W行,因为此时无业务,维护人员关闭了应用程序.查询时选择了将所有数据所有列出,结果在显示到3W多行时,弹 ...

  7. java调用oracle存储过程,返回结果集

    package com.srie.db.pro; import java.sql.CallableStatement; import java.sql.Connection; import java. ...

  8. oracle的存储过程如何返回结果集

    CREATE OR REPLACE PACKAGE pkg_test AS     TYPE myrctype IS REF CURSOR;       PROCEDURE get (p_id NUM ...

  9. oracle 存储过程返回结果集 (转载)

    好久没上来了, 难道今天工作时间稍有空闲, 研究了一下oracle存储过程返回结果集. 配合oracle临时表, 使用存储过程来返回结果集的数据读取方式可以解决海量数据表与其他表的连接问题. 在存储过 ...

随机推荐

  1. python 连接sql server数据库的示例代码

    首先,到http://pymssql.sourceforge.net/下载pymssql模块,必须安装这个模块才可以用python连接mysql 以下是sql server的操作代码,需要注意字符集 ...

  2. posix多线程--互斥量

    多线程程序在线程间共享数据时,如果多个线程同时访问共享数据就可能有问题.互斥量是解决多个线程间共享数据的方法之一. 1.互斥量初始化两种方式:(1)静态初始化 #include <pthread ...

  3. dwz 取不到 form中的值

    在使用dwz的时候,出现的一个问题, <li style=" width:160px;"> <label style=" width:60px;&quo ...

  4. Eclipse无法启动小结

    Eclipse启动的时候出现: The Eclipse executable launcher was unable to locate its companion shared library 针对 ...

  5. js在一个可编辑的div光标处插入图片或者文本(兼容ie,火狐等浏览器)

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  6. Python 部署 flask 用uwsgi和nginx

    安装uwsgi nginx 具体方法请百度 1.在项目目录下建立.ini文件 xad_uwsgi.ini [uwsgi] master=true #项目目录 chdir=/root/zhaoyingj ...

  7. 冒泡排序——PowerShell版

    继续读啊哈磊算法有感系列.上一篇是桶排序,在结尾总结了一下简化版桶排序的缺点.这一篇来说一下冒泡排序,冒泡排序可以很好的克服桶排序的缺点.下面我们先来说说冒泡排序的过程与思想—— 冒泡排序的过程: 第 ...

  8. git工作流教程

    简介:在用git进行开发时,需要规范化,这时用git工作流来规范化,软件开发过程 https://github.com/oldratlee/translations/blob/master/git-w ...

  9. C语言 · 因式分解

    算法提高 8-1因式分解   时间限制:10.0s   内存限制:256.0MB      问题描述 设计算法,用户输入合数,程序输出若个素数的乘积.例如,输入6,输出2*3.输入20,输出2*2*5 ...

  10. [镜像]镜像操作losetup

    安装完之后查看一下版本 /usr/sbin/debootstrap –version转自:http://blog.csdn.net/cnyyx/article/details/27182833 1.挂 ...