在用VC开发的应用程序中,访问Oracle数据库的存储过程中出现了问题如下:在脚本里面调用存储过程的时候,如果用exec mysp 就报告"无效字符";如果用 {call mysp} 则报告“游标错误” 奇怪的是,用一个古老的版本的平台程序则可以用 {call mysp} 完成调用。
原因排查:
最初的se程序在访问数据库接口的时候只区分select 开头的语句和非select开头的语句。对于非select开头的语句一律用odbc的 CDatabase::ExecuteSQL函数处理;对于select开头的语句使用 CRecordSet::Open处理。所以{call mysp}语句是用CDatabase::ExecuteSQL处理的,没有问题。
而新版本的se为了处理call mysp的返回,使用了CRecordSet::Open来处理。这在微软的SqlServer下没有问题,但是在Oracle下就不行了。
解决方案:
在连接oracle数据库的时候,call mysp这样的语句不能用 crecordset::open处理,只能用cdatabase::executesql处理。
说明:exec mysp 一般只能用在数据库服务器自己的客户端里面,如sqlserver的 企业管理器或者oracle的sql plus ,不能用在c语音接口里面。而call mysp则可以用于任何场合。
关于在VC开发的程序里面访问Oracle数据库存储过程的问题的原因分析及解决方案就介绍到这里了,如果您想了解更多关于Oracle数据库的知识,可以看一下这里的文章:http://database.51cto.com/oracle/,相信一定可以带给您收获的!
【编辑推荐】