`
alienchang
  • 浏览: 31557 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

ODBC访问Oracle实例(附代码)

阅读更多
ODBC访问Oracle基本流程和代码:
#include <Windows.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "sql.h"
#include "sqlext.h"

void check_return( RETCODE rc, HENV henv, HDBC hdbc, HSTMT hstmt )
{
	UCHAR state_str [SQL_MAX_MESSAGE_LENGTH];
	SDWORD native_error;
	UCHAR  error_msg [SQL_MAX_MESSAGE_LENGTH];
	SWORD  error_msg_avail = SQL_MAX_MESSAGE_LENGTH - 1;
	SWORD  error_msg_len;
	RETCODE local_rc;
	if (rc != SQL_ERROR && rc != SQL_SUCCESS_WITH_INFO )
	{
		return;
	}
	local_rc = SQLError (henv,hdbc,hstmt,state_str,&native_error,error_msg,error_msg_avail,&error_msg_len);

	if (local_rc != SQL_SUCCESS && rc !=SQL_SUCCESS_WITH_INFO)
	{
		fprintf(stderr,"Uninterpretable error; exiting \n");
		exit (EXIT_FAILURE);
	}
	if (rc == SQL_SUCCESS_WITH_INFO)
	{
		fprintf(stderr,"Fatal Error %s: %s\n", state_str,error_msg);
		return;
	}
	fprintf(stderr,"Fatal Error %s: %s\n",state_str,error_msg);
	exit (EXIT_FAILURE);
}

/*----------------------------------------------------------------------*/

int main (void)
{
	HENV henv = SQL_NULL_HENV;
	HDBC hdbc = SQL_NULL_HDBC;
	HSTMT hstmt = SQL_NULL_HSTMT;
	RETCODE rc;
	char buf[257];
	short buflen;

	printf ("Initialize the environment structure.\n");
	SQLAllocEnv (&henv);

	printf ("Initialize the connection structure.\n");
	SQLAllocConnect (henv,&hdbc);
	printf("Load the ODBC driver.\n");
	rc = SQLConnect(hdbc,(SQLCHAR*)"Oracle", SQL_NTS, //注明:DBDEMO是一个系统数据源,如果这样子写就不行L“DNS=DBDEMO”
		(SQLCHAR*)"alien", SQL_NTS, (SQLCHAR*)"alienchang", SQL_NTS);
	//rc = SQLDriverConnect (hdbc,0,(SQLCHAR*)"DSN=Oracle;UID=alien;PASSWD=alienchang",SQL_NTS,(UCHAR*) buf,sizeof (buf),&buflen,SQL_DRIVER_COMPLETE);
	check_return (rc,henv,hdbc,hstmt);

	printf ("Initialize the statement structure.\n");
	SQLAllocStmt (hdbc,&hstmt);

	SQLUINTEGER ID;
	SQLCHAR Name[20];
	SQLINTEGER szID = 0, szName=0;
	

	/************************************************************************/
	/* prepare, bind and execute                                            */
	/************************************************************************/
	SQLPrepare(hstmt, (SQLCHAR*)"begin say( ?, ?); end;", SQL_NTS);
	SQLBindParameter(hstmt, 1, SQL_PARAM_OUTPUT, SQL_C_CHAR, SQL_VARCHAR, 10, 0, 
		&Name, 0, &szName);
	SQLBindParameter(hstmt, 2, SQL_PARAM_OUTPUT, SQL_INTEGER, SQL_INTEGER, 64, 0,
		&ID, 0, 0);
	rc= SQLExecute(hstmt);
	printf("%03d %d %s %d\n", ID, szID, Name, szName);


	/************************************************************************/
	/* SqlExecDirect Select                                                 */
	/************************************************************************/
	SQLSMALLINT cols;
	SQLINTEGER   sID;
	SQLCHAR   szAccount[50], szRegdate[50];
	SQLINTEGER cbID, cbAccount, cbRegdate; //save the length of parameter
	
	rc = SQLExecDirect (hstmt,(SQLCHAR*)"Select id, account, to_char(regdate,'yyyy-mm-dd hh24:mi:ss') from hx_account", SQL_NTS);
	check_return (rc, henv, hdbc, hstmt);

	while(SQL_NO_DATA != SQLFetch(hstmt)){
		SQLGetData(hstmt, 1, SQL_C_ULONG, &sID, 0, &cbID);
		//此处并没有指明BufferLength参数的值,是因为数据类型是定长的LONG型
		SQLGetData(hstmt, 2, SQL_C_CHAR, szAccount, 50, &cbAccount);
		SQLGetData(hstmt, 3, SQL_C_CHAR, szRegdate, 50,&cbRegdate);
		printf("%8d %s %s\n", sID,  szAccount, szRegdate);
	}

	SQLCHAR colName[21];
	
	SQLUINTEGER szCol;
	SQLSMALLINT colNums, szCName, dType, Digits, isNULL;
	
	rc = SQLNumResultCols(hstmt, &colNums);
	rc = SQLDescribeCol(hstmt, 1, colName, 20, &szCName, &dType, &szCol, &Digits, &isNULL);
	
	printf("列数:%d \n第一列:name:%s %d\t type: %d\t size: %d\t isnull:%d\n", colNums, colName, szCName, dType, szCol, isNULL);

	/************************************************************************/
	/* Create Table and Insert                                              */
	/************************************************************************/
	printf ("Creat table table \"foo\".\n");
	rc = SQLExecDirect (hstmt,(SQLCHAR*)"CREATE TABLE foo (bar INTEGER)", SQL_NTS);
	check_return (rc, henv, hdbc, hstmt);

	printf ("Insert values into table \"foo\".\n");
	rc = SQLExecDirect (hstmt,(SQLCHAR*)"INSERT INTO foo(bar) VALUES (1)", SQL_NTS);
	check_return (rc, henv, hdbc, hstmt);
	rc = SQLExecDirect (hstmt,(SQLCHAR*)"INSERT INTO foo(bar) VALUES (2)", SQL_NTS);
	check_return (rc, henv, hdbc, hstmt);
	rc = SQLExecDirect (hstmt,(SQLCHAR*)"INSERT INTO foo(bar) VALUES (3)", SQL_NTS);
	check_return (rc, henv, hdbc, hstmt);

	SQLINTEGER rowNums;
	rc = SQLRowCount(hstmt, &rowNums);
	printf("影响行数:%d\n", rowNums);

	printf ("Drop table \"foo\".\n");
	rc = SQLExecDirect (hstmt, (SQLCHAR*)"DROP TABLE foo", SQL_NTS);
	check_return (rc,henv,hdbc,hstmt);

	/*  We're done:free resources and exit*/
	printf ("Free the statement handle.\n");
	SQLFreeStmt (hstmt,SQL_DROP);
	printf ("Disconnect from the data source.\n");
	SQLDisconnect (hdbc);
	printf ("Free the connection structure.\n");
	SQLFreeConnect (hdbc);
	printf ("Free the environment structure.\n");
	SQLFreeEnv (henv);
	printf ("Goodbye!\n");
	exit (EXIT_SUCCESS);
}

分享到:
评论

相关推荐

    基于vc的odbc连接oracle实例

    总的来说,这个基于VC的ODBC连接Oracle实例为学习者提供了一种实践方法,通过C++代码直观地了解数据库操作的流程。学习者可以通过阅读和分析源码,深入理解ODBC API的使用,以及如何在VC环境中实现与Oracle数据库的...

    oracle通过odbc建立dblink访问sqlserver数据库

    ### Oracle通过ODBC建立DBLink访问SQLServer数据库 在企业级应用环境中,不同数据库系统间的交互变得越来越频繁。为了实现Oracle数据库与SQLServer数据库之间的数据交换,可以通过多种方式实现连接,其中一种较为...

    odbc连接oracle11g数据库

    ODBC(Open Database Connectivity)是一种数据访问接口,它允许应用程序通过标准的方式与各种数据库系统进行交互,包括Oracle 11g。在Windows 7 64位操作系统中,配置ODBC连接Oracle 11g数据库涉及到以下几个关键...

    javascript连接Oracle实例

    在示例代码中,我们可以看到作者使用了以下代码来连接Oracle实例: ```javascript var strConnString = "Provider=OraOLEDB.Oracle;Data Source=(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=DB)(PORT...

    Oracle ODBC驱动64X

    6. **应用开发**: 使用SQL Server或其他支持ODBC的应用程序,如Microsoft Excel或Visual Studio,可以编写代码来访问Oracle数据库。ODBC API提供了一系列函数,如SQLConnect、SQLExecDirect等,用于建立连接、执行...

    Delphi访问Oracle公共登录模块源代码

    本资源"Delphi访问Oracle公共登录模块源代码"提供了一种解决方案,帮助开发者使用Delphi编程语言与Oracle数据库进行交互。以下是对该主题的详细解释: 1. **Delphi**:Delphi是一种基于Object Pascal的集成开发环境...

    10个各种VC ado,dao,odbc数据库连接vc代码实例.rar

    "10个各种VC ado, dao, odbc数据库连接vc代码实例.rar" 是一个压缩包,其中包含了10个用于演示如何在VC项目中与不同数据库进行交互的源代码实例。这些实例涵盖了ADO(ActiveX Data Objects)、DAO(Data Access ...

    Oracle课程设计 Oracle项目实例 Oracle编程

    在Oracle编程方面,你可能会学习到如何使用JDBC(Java Database Connectivity)或ODBC(Open Database Connectivity)进行数据库连接,执行SQL语句,以及如何处理结果集。此外,如果你对Web开发感兴趣,你还会接触到...

    Windows环境下配置Oracle ODBC安装包及安装配置教程

    在Windows环境中配置Oracle ODBC(Open Database Connectivity)是将Oracle数据库与各种应用程序连接的关键步骤,使得数据能够通过ODBC驱动程序进行访问。本教程将详细讲解如何在Windows上安装Oracle ODBC驱动程序并...

    ODBC和Oracle

    2. **编写代码**:在应用程序中,通过ODBC API调用`SQLConnect`或`SQLDriverConnect`函数,指定数据源名称,建立与Oracle数据库的连接。 3. **执行SQL**:使用ODBC API的`SQLExecDirect`或`SQLPrepare`及`SQLExecute...

    VC ODBC数据库连接代码实例.rar

    在VC++编程环境中,ODBC(Open Database Connectivity)是一种标准的数据库访问接口,它使得开发者可以使用统一的方式访问各种不同的数据库系统。这个“VC ODBC数据库连接代码实例”压缩包提供了一个基础的示例,...

    oracle instantclient-odbc-win32-10.2.0.5.zip

    这样,任何依赖ODBC的应用程序都可以通过这个数据源来访问Oracle数据库。 总的来说,"oracle instantclient-odbc-win32-10.2.0.5.zip"提供了在Windows 32位系统下通过ODBC连接Oracle数据库的功能,简化了开发和部署...

    ODBC及Lotusscript代码连接Oracle数据库总结

    ### ODBC及Lotusscript代码连接Oracle数据库总结 #### 一、Oracle客户端安装与配置 **1. 下载客户端** 为了能够顺利地使用ODBC及Lotusscript代码连接Oracle数据库,首先需要安装Oracle客户端。根据操作系统位数...

    oracle_commond.rar_odbc api_oracle_oracle 客户端_oracle sql_sql

    本文将基于"oracle_commond.rar_odbc api_oracle_oracle 客户端_oracle sql_sql"这一主题,深入探讨Oracle数据库的相关知识,包括ODBC API、Oracle客户端工具以及SQL在Oracle中的应用。 1. ODBC API(Open Database...

    计算机软件-商业源码-实例93 代码控制连接ODBC.zip

    ODBC是微软开发的一种数据库访问接口,允许应用程序通过标准的方式与多种数据库系统进行交互,包括SQL Server、Oracle、MySQL等。 【描述】描述中的“计算机软件-商业源码-实例93 代码控制连接ODBC.zip”暗示了这是...

    C++访问oracle数据库

    可能包括连接配置、SQL查询、结果处理、事务控制等具体的C++代码实例。 总之,使用ocilib库,C++程序员能够方便地与Oracle数据库进行交互,进行数据的增删改查、事务处理等操作。熟悉ocilib的API和用法是提升C++...

    asp链接oracle数据库实例

    在ASP中连接Oracle数据库,首先需要安装Oracle的数据提供者,如ODBC(Open Database Connectivity)或OLE DB提供者。然后在代码中设置连接字符串,包括数据库的SID(Service ID)、用户名、密码和服务器地址等信息。...

Global site tag (gtag.js) - Google Analytics