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