深圳网站设计十年乐云seo,二手书网站开发,网站设计服务合同,给wordpress添加背景音乐先对上一篇调用SQLServer的存储过程作一点补充#xff0c;就是如果存储过程里有Insert,update,delete等操作#xff0c;最后返回结果集#xff0c;按示例代码有可能得不到数据#xff0c;因为返回的数据有可能不在第一个结果集#xff0c;需要进行遍历#xff1a;long ln…先对上一篇调用SQLServer的存储过程作一点补充就是如果存储过程里有Insert,update,delete等操作最后返回结果集按示例代码有可能得不到数据因为返回的数据有可能不在第一个结果集需要进行遍历long lngRec 0;_RecordsetPtr Rs m_Rs; //m_Rs为调用存储过程返回的结果集while(Rs){//结果集的处理有无数据的判断数据处理等while(!m_Rs-EndOfFile){//...}Rs Rs-NextRecordset((VARIANT *)lngRec);}调用Oracle的存储过程vc的调用代码不需要变动但需要对Oracle的存储过程和调用的SQL语句进行一些调整。首先连接字符串不能用ODBC即连接字符串不能是Driver{Microsoft ODBC for Oracle};ServerOracleServer.world;UidUsername;Pwdasdasd;这种形式而应该是类似ProviderMSDAORA.1;Passwordasdasd;User IDUsername;Data Sourceworld;Persist Security InfoTrue然后是存储过程的调整Oracle存储过程怎么返回结果集网上的文章已经很多了需要用到包随便摘录一个CREATE OR REPLACE PACKAGE pkg_testASTYPE myrctype IS REF CURSOR;PROCEDURE get (p_id NUMBER, p_rc OUT myrctype);END pkg_test;/CREATE OR REPLACE PACKAGE BODY pkg_testASPROCEDURE get (p_id NUMBER, p_rc OUT myrctype)ISsqlstr VARCHAR2 (500);BEGINIF p_id 0 THENOPEN p_rc FORSELECT ID, NAME, sex, address, postcode, birthdayFROM student;ELSEsqlstr :select id,name,sex,address,postcode,birthdayfrom student where id:w_id;OPEN p_rc FOR sqlstr USING p_id;END IF;END get;END pkg_test;/其实不用包也可以直接创建get只需要把最后一个参数p_rc的类型改为sys_refcursor就可以了。最后是SQL语句的调整SQLServer是直接get 0就可以Oracle必须这样调用{call get(0)}即执行m_Rs-Open({call get(0)},(IDispatch*)(m_Conn-m_Conn),adOpenStatic, adLockReadOnly,adCmdText);get虽然有两个参数但是SQL语句里这个最后的输出参数是可以不用写的。{call 存储过程名(输入参数1,输入参数2,...)}这样的SQL语句在SQLServer和Oracle是都能得到返回结果集的因此只要把SQL语句改成这种形式程序代码不需要修改就可以同时支持SQLServer和Oracle的存储过程的调用了。