OTL介绍:OTL 是 Oracle, Odbc and DB2-CLITemplate Library 的缩写,是一个C++操控关系数据库的模板库,最新版本4.0.104,参见http://otl.sourceforge.net/,下载地址http://otl.sourceforge.net/otlv4_h.zip。优点:a.跨平台 b. 运行效率高,与C语言直接调用API相当 c.开发效率高,起码比ADO.net使用起来更简单,更简洁 d. 部署容易,不需要ADO组件,不需要.net framework等缺点: a. 只有C++才可以使用她 b. 说明以及范例不足(暂时性的)总的说来,对于C++程序员而言,使用OTL操作关系数据库是最好的选择,其网站上有很多的范例,本人在这里对使用OTL调用Oracle的存储函数(存储函数比存储过程多个返回值)作一个示范,而其他的比如查询、更新、存储过程等就太简单了,直接看otl.sourceforge.net的范例 。Oracle 存储函数 TEST代码:( a In Integer, b Out Integer, c in out Integer, d In Long ) ReturnLongisbegin b := a; c := 2 * c; Return( '');end;说明:Oracle中的long不是C/C++中的长整型,而是varchar_long,对应着OTL中的otl_long_string,这是一种很复杂的类型,本人就用它来举例。C++调用TEST的代码:#include#include //#define OTL_ORA9I //使用这个宏就表示使用Oracle9i的API,而不是ODBC API#define OTL_ODBC // 使用这个宏就表示使用通用的ODBCAPI#include "otlv4.h"using namespace std;void main( void){ otl_connect::otl_initialize(); try { otl_connectdb; db.rlogon( "Driver={Microsoft ODBC forOracle};Server=ZZZ;Uid=XXX;Pwd=YYY;" ); // db.set_max_long_size(?);如果varchar_long长度非常长,超过默认值的话,你需要这一句 otl_stream o( 1, "{:E = callTEST( :A,:B,:C,:D o.set_commit(0); int a =1; int b = 0; int c = 2; otl_long_string d("abc", 0, 3 ); otl_long_string e; o o >> e >> b >>c; cout cout cout //db.commit(); db.logoff(); } catch(otl_exception& p ) { cerr }}说明:"{:E = callTEST( :A,:B,:C,:D"{ call:Name1 := function( Name2 }"也不是"{ call:Name1 \\:= function( Name2 }"而是"{:Name1 = call function( Name2}"这一点和otl.sourceforge.net上的说明不一样。 09-20 01:32