C编写的OCI连接Oracle数据库

合集下载

Vc++6.0通过ODBC操作Oracle数据库

Vc++6.0通过ODBC操作Oracle数据库

Vc++6.0通过ODBC操作Oracle数据库Visual C ++6.0 中提供了CDatabase 、CRecordset 、CRecordView、CDBException、Clong Binary 和CFieldExchange 6 个类,这些类封装了ODBC SDK函数,从而使用户可以无需了解SDK函数就可以很方便地操作支持ODBC 的数据库。

Vc++6.0通过ODBC操作数据库(如sqlsever、Access)代码可以直接移植到操作Oracle中,以下这段代码就是一个Vc++6.0连接sqlsever的代码,连接Oracle数据库时,如不需验证,在SQLConnect()加入用户名和密码就可以了,如scott tiger 其连接数据库的过程,就是通过ODBC连接的一般方法// 定义环境句柄、连接句柄、语句句柄SQLHENV henv;SQLHDBC hdbc;SQLHSTMT hstmt;// 定义返回值SQLRETURN rtcode;//m_strSqlStmt="123456";// 分配环境句柄rtcode = SQLAllocHandle(SQL_HANDLE_ENV,SQL_NULL_HANDLE,&henv);if(rtcode == SQL_SUCCESS || rtcode == SQL_SUCCESS_WITH_INFO){// 设置环境属性(ODBC版本号)rtcode = SQLSetEnvAttr(henv,SQL_ATTR_ODBC_VERSION,(void*)SQL_OV_ ODBC3,0);if(rtcode == SQL_SUCCESS || rtcode == SQL_SUCCESS_WITH_INFO){// 分配连接句柄rtcode = SQLAllocHandle( SQL_HANDLE_DBC, henv, &hdbc);if(rtcode == SQL_SUCCESS || rtcode == SQL_SUCCESS_WITH_INFO){// 设置连接属性(登录超时 = 10s)SQLSetConnectAttr(hdbc,SQL_ATTR_LOGIN_TIMEOUT,(void* )10,0);// 连接数据源LPTSTR lpstrDsn = m_strDB.GetBuffer(m_strDB.GetLength());rtcode = SQLConnect(hdbc,(SQLCHAR*)lpstrDsn,SQL_NTS,(SQLCHAR*)"scott",SQL_NTS,(SQLCHAR*)"tiger",SQL_NTS);if(rtcode == SQL_SUCCESS || rtcode == SQL_SUCCESS_WITH_INFO){// 分配语句句柄rtcode = SQLAllocHandle(SQL_HANDLE_STMT,hdbc,&hstmt);if(rtcode == SQL_SUCCESS || rtcode == SQL_SUCCESS_WITH_INFO){/******** 查询数据 ********/// 定义参数SQLCHARsqlSelList[SEL_LIST_LEN],sqlTabList[SEL_TAB_LEN],sqlConList[SEL _CON_LEN];// 获得参数CString strList = _GetSelList();CString strTab = _GetSelTab();CString strCon = _GetSelCon();strcpy((char*) sqlSelList ,strList);strcpy((char*) sqlTabList ,strTab);strcpy((char*) sqlConList ,strCon);// 直接执行char str[2000];strcpy( str, "SELECT ");strcat( str, strList);strcat( str, " FROM ");strcat( str, strTab);if( !strCon.IsEmpty()){strcat( str, " WHERE ");strcat( str, strCon);}rtcode = SQLExecDirect( hstmt, (SQLCHAR*)str,SQL_NTS);m_strSqlStmt = CString(str);UpdateData(FALSE);// 释放语句句柄SQLFreeHandle(SQL_HANDLE_STMT,hstmt);}// 断开连接SQLDisconnect(hdbc);}// 释放连接句柄SQLFreeHandle(SQL_HANDLE_DBC,hdbc);}}// 释放环境句柄SQLFreeHandle(SQL_HANDLE_ENV,henv);。

oci后缀

oci后缀

oci后缀OCI后缀是指Object Connector Interface的简称,是Oracle公司推出的一种数据库连接技术。

通过OCI,开发人员可以使用各种编程语言与Oracle数据库进行交互,实现数据的读取、写入和修改等操作。

本文将介绍OCI后缀的概念、优势以及使用方法。

一、概念介绍OCI后缀即Object Connector Interface,它是Oracle数据库提供的一种应用编程接口,用于实现程序与数据库的连接和交互。

通过OCI后缀,开发者可以使用C、C++等编程语言来编写与Oracle数据库的应用程序,实现数据的访问和操作。

二、优势分析1. 高性能:OCI后缀采用了Oracle数据库底层的C语言接口,能够直接与数据库进行交互,因此具有较高的性能优势。

相比其他的数据库连接方式,OCI可以更高效地对数据库进行读写操作,提供更好的响应速度和并发性能。

2. 数据安全:OCI后缀支持使用Oracle数据库的安全特性,如数据加密、访问控制等,可以有效保护数据库中的数据安全。

开发者可以通过OCI来实现对敏感数据的加密处理,避免数据泄露和非法访问。

3. 多语言支持:OCI后缀提供了对多种编程语言的支持,如C、C++等。

这意味着开发者可以根据自己的编程习惯和需求,选择合适的编程语言来编写与Oracle数据库的应用程序。

同时,OCI还提供了一系列的开发工具和文档,方便开发者进行开发和调试。

三、使用方法1. 安装OCI驱动程序:在开始使用OCI后缀之前,首先需要安装相应的OCI驱动程序。

可以从Oracle官方网站下载并安装最新的OCI驱动程序,根据操作系统和编程语言选择合适的版本。

2. 配置连接参数:在编写OCI应用程序时,需要正确配置连接参数。

包括数据库的地址、端口、用户名、密码等信息。

使用OCI提供的API或者相关库函数,可以方便地进行连接参数的配置和管理。

3. 连接数据库:使用OCI提供的连接函数,可以与Oracle数据库建立起连接。

Oracle数据库连接的几种方式

Oracle数据库连接的几种方式

Oracle数据库连接的⼏种⽅式⼀、本地通过JDBC获得Oracle数据库连接通过JDBC获得Oracle数据库连接,有三种⽅式:OCI⽅式、thin⽅式和JdbcOdbc桥⽅式。

OCI⽅式依赖于本地的动态链接库,如果在本地安装了Oracle数据库客户端可以采⽤该⽅式;⽽thin⽅式为纯java的数据库连接⽅式;JdbcOdbc桥⽅式依赖于本地ODBC数据库源的配置,这种⽅式⼀般不太被采⽤。

1、OCI⽅式 先在本地安装Oracle客户端,安装完之后,在安装的路径中可以找到…/jdbc/lib/classes12.zip⽂件,我们在环境变量classpath中设置classes12.zip所在的路径。

然后通过以下的数据库连接类,在本地通过OCI⽅式获得Oracle数据库连接。

/*** 在本地获得数据库连接*/package com.j2ee.db;import java.util.*;import java.sql.*;import javax.sql.*;import java.io.*;import oracle.jdbc.driver.*;import javax.naming.*;/*** 通过OCI⽅式获得Oracle数据库连接*/public class DbConnection{ final static String sDBDriver = "oracle.jdbc.driver.OracleDriver"; final static String sConnStr = "jdbc:oracle:oci8:sr/sr@ora199"; /** * */ public DbConnection() { } /** * 获得Oracle数据库连接 */ public java.sql.Connection connectDbByOci() { java.sql.Connection conn=null; try { Class.forName(sDBDriver); conn = DriverManager.getConnection(sConnStr); } catch (Exception e) { System.out.println("ERROR:"+e.getMessage()); } return conn; }}/*** 在本地获得数据库连接*/package com.j2ee.db;import java.util.*;import java.sql.*;import javax.sql.*;import java.io.*;import oracle.jdbc.driver.*;import javax.naming.*;/*** 通过thin⽅式获得Oracle数据库连接*/public class DbConnection{ private String sConnStr = ""; /** * 缺省构造器 */ public DbConnection() { sConnStr = "jdbc:oracle:thin:@10.1.4.199:1521:ora199"; } /** * @param ip,serviceName */ public DbConnection(String ip,String serviceName) { sConnStr = "jdbc:oracle:thin:@"+ip+":1521:"+serviceName; } /** * 通过thin⽅式获得Oracle数据库的连接. */ public java.sql.Connection connectDbByThin() { java.sql.Connection conn=null; try { Class.forName(sDBDriver); conn = DriverManager.getConnection(sConnStr,"sr","sr"); } catch (Exception e) { System.out.println("ERROR:"+e.getMessage()); } return conn; } /** * 通过thin⽅式获得Oracle数据库的连接. * @param userId,password */ public java.sql.Connection connectByJdbc(String userId,String password) { java.sql.Connection conn=null; try {  Class.forName(sDBDriver); conn = DriverManager.getConnection(sConnStr,userId,password); } catch (Exception e) { System.out.println("ERROR:"+e.getMessage()); } return conn; }} 这种⽅式运⽤起来⽐较灵活,简单,具有较强的移植性和适⽤性。

C#连接Oracle数据库(三种方式:OracleClient、ODBC、OLEDB)

C#连接Oracle数据库(三种方式:OracleClient、ODBC、OLEDB)

C#连接Oracle数据库(三种方式:OracleClient、ODBC、OLEDB)1、OracleClient//基于.NET 2.0,只有2.0中包含OracleClientusing System;using System.Collections;using ponentModel;using System.Data;using System.Web;using System.Web.Services;using System.Web.Services.Protocols;using System.Security.Cryptography;using System.IO;using System.Collections.Generic;using System.Configuration;using System.Data.SqlClient;using System.Data.OracleClient;public partial class orclService : System.Web.UI.Page{protected void Page_Load(object sender, EventArgs e){Response.AddHeader("Access-Control-Allow-Origin", "*");List<info> result = new List<info>();string callback = Request.QueryString["method"];if (callback == "getTableInfo")result = getTableInfo();Response.Write(result);Response.End();}//<add key="orclCon" value="Data Source=ORCL;User Id=sa;Password=123;"/>private static string strConn = ConfigurationSettings.AppSettings["orclCon"];[WebMethod(Description = "<h3>Oracle连接测试</h3>")] public List<info> getTableInfo(){List<info> list = new List<info>();OracleConnection conn = new OracleConnection(strConn);conn.Open();string strComm = "select * from ATEST_POLYGON";OracleCommand comm = new OracleCommand(strComm, conn);OracleDataReader sdr = comm.ExecuteReader();info strInfo = null;while (sdr.Read()){strInfo = new info();strInfo.ID = sdr["ID"].ToString();strInfo.Content = sdr["CONTENT"].ToString();list.Add(strInfo);}if (!sdr.HasRows){strInfo.Content = "无匹配记录";list.Add(strInfo);sdr.Close();return list;}public class info{private string id;public string ID{get { return this.id; }set { this.id = value; }}private string content;public string Content{get { return this.content; }set { this.content = value; }}}}2、ODBC(参见“Oracle 通过 ODBC 连接”)using System;using System.Collections;using ponentModel;using System.Data;using System.Linq;using System.Web;using System.Web.Services;using System.Web.Services.Protocols;using System.Xml.Linq;using System.Security.Cryptography;using System.IO;using System.Collections.Generic;using System.Configuration;using System.Data.SqlClient;using System.Data.Odbc;public partial class orclService : System.Web.UI.Page{protected void Page_Load(object sender, EventArgs e){Response.AddHeader("Access-Control-Allow-Origin", "*");int result = 0;string callback = Request.QueryString["method"];if (callback == "getTableInfo")result = getTableInfo();Response.Write(result);Response.End();}//<add key="orclCon_windows" value="DSN=oracle_windows;UID=sa;PWD=123;"/>// <add key="orclCon_linux" value="DSN=oracle_linux;UID=sde;PWD=sde;"/>private static string strConn = ConfigurationSettings.AppSettings["orclCon_linux"];[WebMethod(Description = "<h3>Oracle连接测试</h3>")]public int getTableInfo(){OdbcConnection odbcconn = new OdbcConnection(strConn);odbcconn.Open();string strComm = "select * from ATEST_POLYGON";OdbcDataAdapter odbcda = new OdbcDataAdapter(strComm, odbcconn);DataSet ds = new DataSet();odbcda.Fill(ds);DataTable dt = new DataTable();dt = ds.Tables[0];odbcconn.Close();odbcconn.Dispose();return dt.Rows.Count;}}3、OLEDBusing System;using System.Collections;using ponentModel;using System.Data;using System.Linq;using System.Web;using System.Web.Services;using System.Web.Services.Protocols;using System.Xml.Linq;using System.Security.Cryptography;using System.IO;using System.Collections.Generic;using System.Configuration;using System.Data.SqlClient;using System.Data.OleDb;public partial class orclService : System.Web.UI.Page{protected void Page_Load(object sender, EventArgs e){Response.AddHeader("Access-Control-Allow-Origin", "*");List<info> result = new List<info>();string callback = Request.QueryString["method"];if (callback == "getTableInfo")result = getTableInfo();Response.Write(result);Response.End();}//<add key="orclCon_windows" value="Provider=OraOLEDB.Oracle.1;Data Source=ORCL;User ID=sa;Password=123;Persist Security Info=False;"/>//<add key="orclCon_linux" value="Provider=OraOLEDB.Oracle.1;DataSource=ORCL_LINUX;User ID=sde;Password=sde;Persist Security Info=False;"/>private static string strConn = ConfigurationSettings.AppSettings["orclCon_windows"];[WebMethod(Description = "<h3>Oracle连接测试</h3>")] public List<info> getTableInfo(){List<info> list = new List<info>();OleDbConnection conn = new OleDbConnection(strConn);conn.Open();string strComm = "select * from ATEST_POLYGON";OleDbCommand comm = new OleDbCommand(strComm, conn);OleDbDataReader sdr = comm.ExecuteReader();info strInfo = null;while (sdr.Read()){strInfo = new info();strInfo.ID = sdr["ID"].ToString();strInfo.Content = sdr["CONTENT"].ToString();list.Add(strInfo);}if (!sdr.HasRows){strInfo.Content = "无匹配记录";list.Add(strInfo);}sdr.Close();return list;conn.Close();conn.Dispose();return list;}public class info{private string id;public string ID{get { return this.id; }set { this.id = value; }}private string content; public string Content {get { return this.content; } set { this.content = value; } }}}。

基于OCI技术的Oracle数据库连接

基于OCI技术的Oracle数据库连接

收稿日期:2003-12-03基金项目:广东省科技计划项目资助项目(2003C101037);广东省自然科学基金重点资助项目(010421)作者简介:曾志聪(1979 ),男,广东韶关人,硕士研究生,研究方向为计算机网络。

基于OCI 技术的Oracle 数据库连接曾志聪,姚国祥(暨南大学网络中心,广东广州510632)摘 要:Oracle 数据库是目前应用最广泛的数据库之一,基于Oracle 数据库的大型应用对系统响应时间提出了越来越高的要求,如何有效地提高Oracle 数据库的访问效率,减少系统等待时间成为一个热门的研究问题。

文中介绍了Oracle Call In ter face(OCI)技术及其新特性,并通过分析和对比ODBC,JDBC 的实现机理,表明了OCI 技术在访问Oracle 数据库上性能的优越性。

最后描述了OCI 技术的编程机制,用OCI 技术实现了访问Oracle 数据库的典型应用,为OCI 技术的应用提供了技术参考。

关键词:Oracle 调用接口;JDBC 驱动接口;ODBC 驱动接口;Oracle 数据库;数据库接口中图分类号:T P311.138 文献标识码:A 文章编号:1005-3751(2004)08-0011-03Oracle Database Connection Based on OCI TechnologyZENG Zhi cong ,YAO Guo x iang(N etw ork Center of Jinan University,Guang zhou 510632,China)Abstract:Oracle i s one of the most popular databases.As the demand for a shorter response ti m e in large applicati ons based on Oracle database is i ncreasing,how to shorten the response time and effectivel y acces s an Oracle database become a hot topic and gain our research interest.In this paper Oracle call i nterface (OCI )technology and its new features are introduced.T he implementing mechanism of ODBC,JDBC and OC I are compared to show the better performance of OC I on accessing an Oracle database.Finally,the mechanism of OCI programming is particularly described and some typical functions implemented with OC I for accessing Oracle databases are provided for references.Key words:OCI;JDBC;ODBC;Oracle;database API0 引 言Oracle Call Interface(OCI)是Ora cle 的数据库调用接口。

C++ 使用OCILIB 连接Oracle数据库 总结

C++ 使用OCILIB 连接Oracle数据库 总结
====== 本文测试环境 ======
本文是在 win7 64 位平台上,远程访问 64 位的 Oracle 11g 服务器,使用的编译器是 VS2012。 同时安装了对应的 64 位 Oracle 客户端,在配置和移植工具中配置对应的服务器 SCDB。配置 完毕后,使用 PLSQL Deveplor 可以正常登陆。 正常情况下,即可以使用 ocilib 连接数据库,如有问题,可能是一些配置出问题,可以参看 猫猫爱吃鱼的《OCI 试用》一文,重点摘录如下。
====== 引言 ======
在 C++下连接 Oracle 的方式可以使用 OCI。OCI 是甲骨文提供 Oracle 调用接口(Oracle Call Interface 简称 OCI),是 Oracle 数据库访问的基础接口。OCI 访问 Oracle 虽然效率很高,但 OCI 的 API 非常复杂,一个简单的功能就需要编写相当多的代码。后来 Oracle 为 C++提供了 一套新的 OCCI(Oracle C++ Call Interface)接口。该接口使用起来较为简单,但 Oracle 对其支持 力度有限,且 occi 库对编译器,编译器版本,数据库版本,crt 版本,操作平台版本都有诸 多限制。因此,出现了一些封装 oci 但是是以类 jdbc 或者 occi 风格的 wrapper 库,比如 oraLib, ocilib,ocl。本文中使用的即是 OCILIB。
system("pause");
return EXIT_SUCCESS; }
</code> ====== 错误解决 ====== 本部分记录在测试过程中碰见的错误以及解决方法。
===== 错误 LNK2019:无法解析的外部符号_OCI_Initialize@12 ===== 这是编译环境不匹配,导致 lib 文件未能正确导入的问题。由于本文中是 64 位系统,因此相 关项目需要将编译环境设置为 x64。设置方法为:项目属性 》 配置管理器 》 活动解决方 案平台 》 新建 》 x64。

用oci开发oracle数据库的方法

用oci开发oracle数据库的方法

用oci开发oracle数据库的方法OCI是Oracle提供的一种基于C/C++语言的接口,用于访问Oracle数据库。

在OCI开发的过程中,可以使用OCI提供的函数来执行各种类型的数据库操作。

本文将介绍OCI开发Oracle数据库的一般步骤。

1. 安装Oracle数据库客户端在使用OCI开发Oracle数据库之前,您需要安装Oracle数据库客户端。

Oracle客户端包含OCI库和头文件。

建议使用与目标Oracle数据库版本相同的客户端。

2. 配置开发环境为了使用OCI进行开发,你需要在你的开发环境中配置相关的Oracle环境变量。

设置ORACLE_HOME和LD_LIBRARY_PATH环境变量,以便OCI库和头文件所在的目录被正确找到。

3. 设置OCI环境使用OCI开发Oracle数据库之前,需要创建OCI环境和错误处理器。

OCI环境是OCI函数调用所需的上下文信息,可通过OCIEnvCreate函数创建。

OCIEnvCreate函数需要连接模式和错误处理器作为输入参数。

4. 连接到Oracle数据库在使用OCI连接Oracle数据库之前,您需要知道以下信息:· Oracle数据库的SID或服务名称;· 数据库主机名或IP地址;· 使用的端口号;· 连接的用户名和密码。

您可以使用OCI函数OCILogon或OCIConnect来连接Oracle数据库。

其中OCILogon函数使用数据库SID或服务名来连接数据库,而OCIConnect函数使用主机名、端口号和服务名称。

5. 执行SQL语句使用OCI函数OCIStmtPrepare和OCIStmtExecute来执行SQL语句。

OCIStmtPrepare用于准备一个SQL语句的执行,而OCIStmtExecute函数用于实际执行该SQL语句。

执行SQL语句可能涉及到绑定参数和获取结果集,您可以使用OCI函数OCIBindByPos、OCIDefineByPos和OCIStmtFetch来完成这些操作。

C#连接Oracle数据库的四种方法

C#连接Oracle数据库的四种方法

C#连接Oracle数据库的四种⽅法C#连接数据库的四种⽅法在进⾏以下连接数据库之前,请先在本地安装好Oracle Client,同时本次测试System.Data的版本为:2.0.0.0。

在安装Oracle Client上请注意,如果OS是3-BIT请安装32-BIT的Oracle Client,但OS是64-BIT,需要根据实际情况安装,如果你的APP是按32-BIT运⾏的,则需要安装32-BIT客户端,如果是按64位运⾏的,则安装64位客户端,⽽不是OS是64-BIT的,就要安装64-BIT的ORACLE 客户端。

本次测试会在32-BIT 和64-BIT 上同时测试,32-BIT Oracle10G。

1.ODBC1.1 ⾸先需要在控制⾯板->管理⼯具->数据源(odbc)。

1.2 using System.Data.Odbc;1.3 连接数据库OdbcConnection conn = new OdbcConnection(DSN=XXX;UID=XXX;Pwd=XXX;);conn.Open();conn.Close();32-BIT 和64-BIT 都OK。

2.OleDb2.1 OleDB连接驱动有MSDAORA和OraOLEDB.Oracle,他们分别由微软和Oracle提供。

使⽤OraOLEDB.Oracle驱动,需要安装Oracle Data Provider for OLE DB 。

在32位机器上两者都可以,在64位机器上,使⽤“MSDAORA”会出现“未在本地计算机上注册“MSDAORA.1”提供程序”的问题,OraOLEDB.Oracle⼀切正常。

2.2 连接数据库//using System.Data.OleDb;OleDbConnection conn = new OleDbConnection("Provider=MSDAORA.1;User ID=XXX;password=XXX;Data Source=XXX;Persist Security Info=False"); Provider需要根据实际情况修改conn.Open();conn.Close();3.OracleClient3.1 //using System.Data.OracleClient;3.2 连接数据库OracleConnection conn = new OracleConnection(“data source=XXX;user=XXX;password=XXX;”);conn.Open();conn.Close();32-BIT 和64-BIT 都OK。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

linux下用C编写的OCI连接Oracle数据库程序代码2009-11-28 15:57206人阅读评论(0)收藏举报在Oracle 建立数据库create table employees(employee_id number(3), name varchar2(20), sex varchar2(5), birthday date);alter session set nls_date_format = 'yyyy-mm-dd';insert into employees values('101', '耳温枪', 'na', '1999-05-03');insert into employees values('102', 'xiaoli ', 'na', '1999-02-03');insert into employees values('103', 'xiaozhang ', '男', '1999-02-03');insert into employees values('104', '五千万', '男', '1999-02-03');insert into employees values('105', '问问', '女', '1999-02-03');insert into employees values('106', '阿散酸', '女', '1999-02-03');insert into employees values('107', '阿斯顿', '男', '1999-02-03');insert into employees values('108', '撒旦', 'na', '2001-5-05');insert into employees values ('001','张三','三','2001-07-05');insert into employees values('111','张三','一','2003-02-08');OCI代码:/*gcc -D_LARGEFILE64_SOURCE -D_FILE_OFFSET_BITS=64-I${ORACLE_HOME}/rdbms/public -I${ORACLE_HOME}/rdbms/demo-L${ORACLE_HOME}/lib -lclntsh -o oracle_test oracle_test.c*/#include <stdio.h>#include <stdlib.h>#include <string.h>#include <oci.h>static OCIEnv *p_env;static OCIError *p_err;static OCISvcCtx *p_svc;static OCIStmt *p_sql;static OCIDefine *p_dfn = (OCIDefine *) 0;static OCIBind *p_bnd = (OCIBind *) 0;int main(){int p_bvi;char *p_sli;char *p_sli1;int rc;char errbuf[100];int errcode;char mysql[20];p_sli=(char *)malloc(20);memset(p_sli,0,20);p_sli1=(char *)malloc(20);memset(p_sli1,0,20);/* Initialize OCI evironment*/rc = OCIEnvCreate((OCIEnv **) &p_env,OCI_DEFAULT,(dvoid *)0,(dvoid * (*)(dvoid *, size_t)) 0,(dvoid * (*)(dvoid *, dvoid *, size_t))0,(void (*)(dvoid *, dvoid *)) 0,(size_t) 0, (dvoid **) 0);/* Initialize handles */rc = OCIHandleAlloc( (dvoid *) p_env, (dvoid **) &p_err, OCI_HTYPE_ERROR,(size_t) 0, (dvoid **) 0);rc = OCIHandleAlloc( (dvoid *) p_env, (dvoid **) &p_svc, OCI_HTYPE_SVCCTX,(size_t) 0, (dvoid **) 0);/* Connect to database server */rc = OCILogon(p_env, p_err, &p_svc, "scott", 5, "tiger", 5, "orcl", 4);//rc = OCILogon(p_env, p_err, &p_svc, "hr/hr@orcl", 10, NULL, -1, NULL, -1);if (rc != 0) {OCIErrorGet((dvoid *)p_err, (ub4) 1, (text *) NULL, &errcode, errbuf, (ub4) sizeof(errbuf), OCI_HTYPE_ERROR);printf("Error - %.*s/n", 512, errbuf);exit(8);}else{printf("Connect to orcl successful! 已连接!/n");}/* Allocate and prepare SQL statement */rc = OCIHandleAlloc((dvoid *) p_env, (dvoid **) &p_sql,OCI_HTYPE_STMT, (size_t) 0, (dvoid **) 0);/* set my sql statement */// strcpy(mysql,"select name from employees where emploee_id=:x");strcpy(mysql, "select * from employees ");// strcpy(mysql, "insert into employees values('109', 'x12er', 'na', '1888-06-08')");//strcpy(mysql,"delete from employees where emploee_id='108'");// strcpy(mysql,"desc employees;");rc = OCIStmtPrepare(p_sql, p_err, mysql,(ub4) strlen(mysql), (ub4) OCI_NTV_SYNTAX, (ub4) OCI_DEFAULT);/* Bind the values for the bind variables */// p_bvi = 101; /* Use employee_id=102 */// rc = OCIBindByName(p_sql, &p_bnd, p_err, (text *) ":x",// -1, (dvoid *) &p_bvi, sizeof(int), SQLT_INT, (dvoid *) 0,// (ub2 *) 0, (ub2 *) 0, (ub4) 0, (ub4 *) 0, OCI_DEFAULT);/* Define the select list items */rc = OCIDefineByPos(p_sql, &p_dfn, p_err, 1, (dvoid *) p_sli,(sword) 20, SQLT_STR, (dvoid *) 0, (ub2 *)0,(ub2 *)0, OCI_DEFAULT);rc = OCIDefineByPos(p_sql, &p_dfn, p_err, 2, (dvoid *) p_sli1,(sword) 20, SQLT_STR, (dvoid *) 0, (ub2 *)0,(ub2 *)0, OCI_DEFAULT);/* Execute the SQL statment */rc = OCIStmtExecute(p_svc, p_sql, p_err, (ub4) 1, (ub4) 0,(CONST OCISnapshot *) NULL, (OCISnapshot *) NULL, OCI_DEFAULT);while (rc != OCI_NO_DATA) { /* Fetch the remaining data */printf("%s %s/n",p_sli,p_sli1);rc = OCIStmtFetch(p_sql, p_err, 1, 0, 0);}/* if(rc != OCI_SUCCESS && rc != OCI_SUCCESS_WITH_INFO){printf("insert error!/n");OCIErrorGet((dvoid *)p_err, (ub4) 1, (text *) NULL, &errcode, errbuf, (ub4) sizeof(errbuf), OCI_HTYPE_ERROR);}elseprintf("insert success!/n");*/rc = OCILogoff(p_svc, p_err); /* Disconnect */rc = OCIHandleFree((dvoid *) p_sql, OCI_HTYPE_STMT); /* Free handles */rc = OCIHandleFree((dvoid *) p_svc, OCI_HTYPE_SVCCTX);rc = OCIHandleFree((dvoid *) p_err, OCI_HTYPE_ERROR);return;}。

相关文档
最新文档