<menu id="w8yyk"><menu id="w8yyk"></menu></menu>
  • <dd id="w8yyk"><nav id="w8yyk"></nav></dd>
    <menu id="w8yyk"></menu>
    <menu id="w8yyk"><code id="w8yyk"></code></menu>
    <menu id="w8yyk"></menu>
    <xmp id="w8yyk">
    <xmp id="w8yyk"><nav id="w8yyk"></nav>
  • 網站首頁 > 物聯資訊 > 技術分享

    OTL使用總結

    2016-09-28 00:00:00 廣州睿豐德信息科技有限公司 閱讀
    睿豐德科技 專注RFID識別技術和條碼識別技術與管理軟件的集成項目。質量追溯系統、MES系統、金蝶與條碼系統對接、用友與條碼系統對接

     在VC中訪問Oracle,可以使用ADO或ODBC,如果你比較強大,也可以直接使用OCI API,但我個人認為OTL是最佳選擇,它是一套數據庫訪問C++模板庫,全部代碼都在otlv4.h頭文件中,通過OTL不但可以訪問Oracle數據庫(使用OCI  API),還可以訪問DB2,或者使用ODBC連接字符串訪問其他數據庫。

     

         otl的源碼只有一個頭文件——otlv4.h。下面以一個例子來說明如何使用otl。

    [cpp] view plaincopy
    1. #define OTL_ORA10G  
    2. #include <otlv4.h>  
    3. void CAboutDlg::OnBnClickedOk()  
    4. {  
    5.     // TODO: 在此添加控件通知處理程序代碼  
    6.     otl_connect OracleDb;  // 定義一個oracle數據庫的連接對象  
    7.    
    8.     OracleDb.otl_initialize(TRUE);// 以線程安全模式初始化OCI環境   
    9.   
    10.     std::string szConnectString = _T("system/zjc@ORCL");    
    11.   
    12.     try    
    13.     {   
    14.         // 連接數據庫  
    15.         OracleDb.rlogon(szConnectString.c_str(),1);   
    16.         // 查詢數據庫中所有用戶  
    17.         std::string strSql = _T("select username from dba_users");    
    18.         otl_stream i(1024, // buffer size    
    19.             strSql.c_str(),    
    20.             OracleDb // connect object    
    21.             );    
    22.   
    23.         int nNumUser = 0 ;  
    24.         TCHAR szNum[64];   
    25.         while(!i.eof())// while not end-of-data    
    26.         {  
    27.             i>>szNum; //獲取單個用戶名  
    28.             nNumUser++;  
    29.         }  
    30.         CString strNum;  
    31.         strNum.Format(("當前oracle數據庫用戶個數為:%d"),nNumUser);  
    32.         AfxMessageBox(strNum);  
    33.     }    
    34.     catch (otl_exception& p)    
    35.     {    
    36.         TRACE(_T("Oracle connecterror(msg:%s, stm_text: %s, sqlstate: %s, var_info: %s)"), p.msg, p.stm_text, p.sqlstate, p.var_info);    
    37.     }    
    38.   
    39.     OnOK();  
    40. }  

           代碼在WinXp+ sp2, VS 2008 + sp1,oracle 10gr2環境下測試通過。上面代碼例子連接Oracle數據庫用到了rlogon()函數,調用它時需要為它提供一個連接字符串,一般是這樣的:

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

        

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

    [html] view plaincopy
    1. # tnsnames.ora Network Configuration File: D:\oracle\product\10.2.0\db_1\network\admin\tnsnames.ora  
    2. # Generated by Oracle configuration tools.  
    3.   
    4. ORCL =  
    5.   (DESCRIPTION =  
    6.     (ADDRESS = (PROTOCOL = TCP)(HOST = zjc)(PORT = 1521))  
    7.     (CONNECT_DATA =  
    8.       (SERVER = DEDICATED)  
    9.       (SERVICE_NAME = orcl)  
    10.     )  
    11.   )  
    12.   
    13. EXTPROC_CONNECTION_DATA =  
    14.   (DESCRIPTION =  
    15.     (ADDRESS_LIST =  
    16.       (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1))  
    17.     )  
    18.     (CONNECT_DATA =  
    19.       (SID = PLSExtProc)  
    20.       (PRESENTATION = RO)  
    21.     )  
    22.   )  

        那么TNS Alias就是ORCL。 

        此外需要注意的是使用otl連接oracle數據庫需要鏈接oci.lib,也就是說需要包含它的頭文件和庫文件路徑。

     

    參考文獻:

    1.     在VC中使用OTL訪問Oracle和程序發布

    RFID管理系統集成商 RFID中間件 條碼系統中間層 物聯網軟件集成
    最近免费观看高清韩国日本大全