天天看点

OTL使用总结

 在VC中访问Oracle,可以使用ADO或ODBC,如果你比较强大,也可以直接使用OCI API,但我个人认为OTL是最佳选择,它是一套数据库访问C++模板库,全部代码都在otlv4.h头文件中,通过OTL不但可以访问Oracle数据库(使用OCI  API),还可以访问DB2,或者使用ODBC连接字符串访问其他数据库。

     otl的源码只有一个头文件——otlv4.h。下面以一个例子来说明如何使用otl。

#define OTL_ORA10G  

#include <otlv4.h>  

void CAboutDlg::OnBnClickedOk()  

{  

    // TODO: 在此添加控件通知处理程序代码  

    otl_connect OracleDb;  // 定义一个oracle数据库的连接对象  

    OracleDb.otl_initialize(TRUE);// 以线程安全模式初始化OCI环境   

    std::string szConnectString = _T("system/zjc@ORCL");    

    try    

    {   

        // 连接数据库  

        OracleDb.rlogon(szConnectString.c_str(),1);   

        // 查询数据库中所有用户  

        std::string strSql = _T("select username from dba_users");    

        otl_stream i(1024, // buffer size    

            strSql.c_str(),    

            OracleDb // connect object    

            );    

        int nNumUser = 0 ;  

        TCHAR szNum[64];   

        while(!i.eof())// while not end-of-data    

        {  

            i>>szNum; //获取单个用户名  

            nNumUser++;  

        }  

        CString strNum;  

        strNum.Format(("当前oracle数据库用户个数为:%d"),nNumUser);  

        AfxMessageBox(strNum);  

    }    

    catch (otl_exception& p)    

    {    

        TRACE(_T("Oracle connecterror(msg:%s, stm_text: %s, sqlstate: %s, var_info: %s)"), p.msg, p.stm_text, p.sqlstate, p.var_info);    

    OnOK();  

}  

       代码在WinXp+ sp2, VS 2008 + sp1,oracle 10gr2环境下测试通过。上面代码例子连接Oracle数据库用到了rlogon()函数,调用它时需要为它提供一个连接字符串,一般是这样的:

[User Name]/[Password]@[TNS Alias]

        这里的TNS Alias指在tnsnames.ora中配置TNS名,比如我的tnsnames.ora里有以下的配置:

# tnsnames.ora Network Configuration File: D:\oracle\product\10.2.0\db_1\network\admin\tnsnames.ora  

# Generated by Oracle configuration tools.  

ORCL =  

  (DESCRIPTION =  

    (ADDRESS = (PROTOCOL = TCP)(HOST = zjc)(PORT = 1521))  

    (CONNECT_DATA =  

      (SERVER = DEDICATED)  

      (SERVICE_NAME = orcl)  

    )  

  )  

EXTPROC_CONNECTION_DATA =  

    (ADDRESS_LIST =  

      (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1))  

      (SID = PLSExtProc)  

      (PRESENTATION = RO)  

    那么TNS Alias就是ORCL。 

    此外需要注意的是使用otl连接oracle数据库需要链接oci.lib,也就是说需要包含它的头文件和库文件路径。

参考文献: