zoukankan      html  css  js  c++  java
  • OTL使用总结

    作者:朱金灿

    来源:http://blog.csdn.net/clever101

     

            在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 =
      (DESCRIPTION =
        (ADDRESS_LIST =
          (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1))
        )
        (CONNECT_DATA =
          (SID = PLSExtProc)
          (PRESENTATION = RO)
        )
      )
    

        那么TNS Alias就是ORCL。 

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

     

    参考文献:

    1.     在VC中使用OTL访问Oracle和程序发布








  • 相关阅读:
    Hibernate整合Druid数据库连接池遇到的问题整合
    Spring 整合quartz 时 定时任务被调用两次以及quartz 的配置
    BigDecimal divide:Non-terminating decimal expansion; no exact representable decimal result.
    Hibernate: Encountered a duplicated sql alias [] during auto-discovery of a native-sql
    oracle与mysql的区别
    搜索评价指标——NDCG
    java 动态修改注解值
    eclipse 取消置顶
    Xiangqi
    All in All
  • 原文地址:https://www.cnblogs.com/lanzhi/p/6470571.html
Copyright © 2011-2022 走看看