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

c++ odbc

阅读更多
#include<windows.h>
#include<sql.h>
#include<sqlext.h> 
#include<string.h>
#include<iostream>  
#include <windef.h>
using namespace std;
#pragma comment (lib,"odbc32.lib")


//struct tagTIME_STRUCT { SQLUSMALLINT hour; SQLUSMALLINT minute; SQLUSMALLINT second; } TIME_STRUCT  

/** 简单的宏,用于判断ODBCAPI的执行结果是否正确 **/
#define isSuc(result) ((result) == SQL_SUCCESS || (result) == SQL_SUCCESS_WITH_INFO)

/** 可扩展设置 **/
char szConnectString[256] ="Driver={SQL Server};Database=NewQuality;Server=192.168.1.108;uid=sa;pwd=123456;";
//"driver={Microsoft Access Driver (*.mdb)};DBQ=E:\\ODBC.MDB
char szSQL[256] = "select  * from Version";
/** 输出缓存 **/
 char szDriverOutput[256];
 char szConnectStr[256]="pesq";
 char szUserName[256]="sa";
 char szPassWord[256]="123456";
short sDriverOutputLength;
/** 用于测试的变量 **/
int a = 0;
char b[255];
char c[255];
long temp = 0;

/** 用于测试的函数 **/
int main(){
 short sret; //返回代码
 void* henv;  //环境句柄
 void* hdbc;  //连接句柄
 long mode;//提交模式
 void* hsmt; //语句句柄
 TIMESTAMP_STRUCT curTime;
 /** 申请环境句柄 **/
 sret = SQLAllocHandle(SQL_HANDLE_ENV,SQL_NULL_HANDLE,&henv);
 if(!isSuc(sret))printf("申请环境句柄出错\n");
 /** 设置环境属性,声明ODBC版本 **/
 sret = SQLSetEnvAttr(henv,SQL_ATTR_ODBC_VERSION,(void*)SQL_OV_ODBC3,SQL_IS_INTEGER);
 if(!isSuc(sret))printf("声明ODBC版本出错\n");
 /** 申请连接句柄 **/
 sret = SQLAllocHandle(SQL_HANDLE_DBC,henv,&hdbc);
 if(!isSuc(sret))printf("申请连接句柄出错\n");
 /** 设置连接属性 **/
 //sret = SQLSetConnectAttr(hdbc,SQL_ATTR_AUTOCOMMIT,(void*)SQL_AUTOCOMMIT_OFF,SQL_IS_INTEGER);
 //if(!isSuc(sret))printf("设置连接属性出错\n");
 /** 取得连接属性 **/
 //sret = SQLGetConnectAttr(hdbc,SQL_ATTR_AUTOCOMMIT,(void*)&mode,sizeof(mode) + 1,NULL);
 //if(!isSuc(sret))printf("取得连接属性出错\n");
 /** 连接数据源 **/
   sret =  SQLConnect(hdbc,(SQLCHAR*)szConnectStr,256,NULL,256,NULL,256);
   sret = SQLDriverConnect(hdbc,NULL,(SQLCHAR*)szConnectString,SQL_NTS, (SQLCHAR *)szDriverOutput,256,&sDriverOutputLength,SQL_DRIVER_NOPROMPT);
  if(!isSuc(sret))printf("连接数据源出错\n");
 /** 分配语句句柄 **/
 sret = SQLAllocHandle(SQL_HANDLE_STMT,hdbc,&hsmt);
 if(!isSuc(sret))printf("分配语句句柄出错\n");
 /** 执行语句 **/
 sret = SQLExecDirect(hsmt,(SQLCHAR *)szSQL,256);
 if(!isSuc(sret))printf("执行语句出错\n");
 /** 绑定结果集和获得数据 **/
 /**
 小提示,这里应该可以先取得字段列表然后用循环做成自动邦定的。 
 **/
 char szVersion[255];
 SQLBindCol(hsmt,1,SQL_C_CHAR,szVersion,256,&temp);//测试时
 SQLBindCol(hsmt,2, SQL_C_TIMESTAMP,&curTime,sizeof(TIMESTAMP_STRUCT),&temp);//测试时
 
 //SQLBindCol(hsmt,2,SQL_C_CHAR,&b,sizeof(b),&temp);//测试时
  /** 取得数据 **/
 while(true){
  //一般方式
  sret = ::SQLFetch(hsmt);
  /** 滚动 **/
  //sret = SQLFetchScroll(hsmt,SQL_FETCH_NEXT,0);
  /**
  前面如果发生错误,这里很可能得不到SQL_NO_DATA_FOUND而发生死循环,
  所以我不用而用SQL_SUCCESS来判断,但这句在杂复的程序中里依然有用。 
  **/
  //if (sret == SQL_NO_DATA_FOUND) break; //如果没有数据就打断。
  if (sret != SQL_SUCCESS) break;
  printf("a = %s\t",szVersion);//测试时
   printf("retTemp=%d\n",temp);
  printf("curTime =%d-%d-%d %d:%d:%d \t",curTime.year ,curTime.month,curTime.day,
    curTime.hour,curTime.minute,curTime.second);//测试时
  //printf("b = %s\r\n",b);//测试时
  //printf("c = %s\r\n",c);//测试时   
    printf("retTemp=%d\n",temp);
    SQL_NULL_DATA

 }
 /** 释放语句句柄 **/
 SQLFreeHandle(SQL_HANDLE_STMT,hsmt);
 /** 提交连接的事务 **/
 SQLEndTran(SQL_HANDLE_DBC,hdbc,SQL_COMMIT);
 /** 断开与数据源的连接 **/
 SQLDisconnect(hdbc);
 /** 释放连接句柄 **/
 SQLFreeHandle(SQL_HANDLE_DBC,hdbc);
 /** 释放环境句柄 **/
 SQLFreeHandle(SQL_HANDLE_ENV,henv);
 /////////无关语句,仅仅是让程序停下来,看结果。 
 getchar();//测试时
}



 

分享到:
评论

相关推荐

    一个完整的C++ odbc连接数据库例子

    ### C++ ODBC连接数据库实例解析 在C++开发领域,使用ODBC(开放式数据库连接)接口连接并操作数据库是一项核心技能。本文将基于提供的文件信息,深入解析一个使用C++与ODBC连接数据库的完整示例,涵盖关键概念、...

    c++ ODBC 封装类

    在C++编程中,利用ODBC可以实现跨平台的数据库操作,无需关心底层数据库的具体实现。本文将详细介绍如何使用C++进行ODBC封装,以及涉及的关键知识点。 首先,`odbccore.cpp`文件中应包含实现ODBC连接管理、SQL语句...

    odbc访问存储过程/C++

    odbc访问存储过程/C++ odbc访问存储过程/C++ odbc访问存储过程/C++ odbc访问存储过程/C++ odbc访问存储过程/C++ odbc访问存储过程/C++ odbc访问存储过程/C++ odbc访问存储过程/C++ odbc访问存储过程/C++ odbc访问...

    odbc.rar_c++ odbc_odbc _odbccp32

    本压缩包"odbc.rar_c++ odbc_odbc _odbccp32"包含了C++环境下使用ODBC进行数据库操作的相关资源。 1. **ODBC架构**: ODBC分为三个主要组件:驱动管理器(Driver Manager)、数据库驱动程序(Database Driver)和...

    Simple C++ ODBC API

    本项目“Simple C++ ODBC API”旨在创建一个简单的C++库,方便开发者在C++环境中使用ODBC API进行数据库操作,特别关注于MS-SQL数据库的兼容性。 在C++中,ODBC API通常通过SQL头文件和库来使用,如`sql.h`和`...

    C++ODBC方式连接数据库

    现在很多人开始用 VS2010 的 C++了,以前大家都是从 VC6.0 开始使用,对 6.0 比较熟悉,网上很多关于连接数据库的方法都是针对 VC6.0 的,很多人用 2010 用了一段时间之后不随手就放弃了,继续使用 VC6.0.作者作为一...

    C++ 直接通过ODBC读写Excel表格文件

    当涉及到与数据处理相关的任务时,C++也可以通过ODBC(Open Database Connectivity)接口来实现对各种数据库的访问,包括Microsoft Excel。本篇文章将深入探讨如何利用C++直接通过ODBC读写Excel表格文件。 首先,...

    VS 2010 C++ 用ODBC方式读取数据库

    在本文中,我们将深入探讨如何使用Visual Studio 2010 C++通过ODBC(Open Database Connectivity)接口来访问和读取Access数据库。ODBC是一种标准的API,它允许应用程序与各种不同类型的数据库进行交互,包括...

    C/C++使用ODBC连接SQL server数据库完整流程

    在C/C++编程中,与SQL Server数据库进行交互通常会涉及到ODBC(Open Database Connectivity)技术。ODBC是一个中间层,允许应用程序通过标准接口访问多种不同的数据库系统,包括SQL Server。下面将详细介绍如何使用...

    C/C++使用ODBC操作SQL server数据库

    C/C++作为底层编程语言,虽然不常用于直接操作数据库,但通过ODBC(Open Database Connectivity)接口,可以与各种类型的数据库进行交互,包括SQL Server。ODBC提供了一个标准化的方式,使得应用程序能够访问不同...

    C++通过ODBC将数据入库

    C++通过ODBC将数据入库C++通过ODBC将数据入库C++通过ODBC将数据入库C++通过ODBC将数据入库C++通过ODBC将数据入库C++通过ODBC将数据入库C++通过ODBC将数据入库C++通过ODBC将数据入库C++通过ODBC将数据入库

    visual c++源码 odbc access mdb数据库

    在"Visual C++源码 odbc access mdb数据库"这个主题中,主要涉及到的知识点有: 1. **Visual C++编程**:这是微软的C++集成开发环境(IDE),支持C++语言的编写、调试和编译。通过Visual C++,开发者可以创建桌面...

    dynamic_odbc_class.zip_C ODBC_DEMO_c++ odbc_dynamic_odbc_class_o

    本压缩包“dynamic_odbc_class.zip”是一个关于C++编程中利用ODBC进行数据库操作的资源集合,主要针对的是动态链接ODBC类库的使用。该资源包包含了DEMO程序,方便开发者学习和理解如何在C++中有效地操作ODBC数据库。...

    ODBC_API.zip_ODBC API_c++ odbc_odbc _odbcap_site:www.pudn.com

    ODBC API是实现这一功能的核心,它为C和C++程序员提供了丰富的函数库,使得开发者能够编写出能连接多种数据库的程序,而无需关心底层数据库的具体实现细节。 在"ODBC_API.zip"这个压缩包中,包含了一个名为"ODBC_...

    odbc.rar_VC odbc EXCEL_VC 数据库_c++ odbc 源码_odbc vc_数据库 vc

    总的来说,这个压缩包提供了一个在VC++环境中使用ODBC与Excel交互的实例,对于想要学习如何在C++中进行数据库操作的开发者来说,这是一个非常有价值的资源。通过学习和理解这些源码,你可以掌握如何在自己的应用程序...

    MySQL ODBC 用C++连接MySQL数据库

    在C++编程中,使用ODBC API可以实现与多种数据库的交互,包括MySQL。以下是对该主题的详细说明: 1. **MySQL数据库系统**:MySQL是一种关系型数据库管理系统(RDBMS),基于SQL标准,由Oracle公司维护。它的特点是...

    影院售票系统c++ODBC

    在本项目中,我们探讨的是一个基于C++编程语言实现的影院售票系统,该系统利用ODBC(Open Database Connectivity)接口来与Access数据库进行交互。ODBC是微软提供的一种标准API,使得应用程序能够以统一的方式访问...

    基于ODBC方法实现读写excel的C++类

    在C++中,利用ODBC可以实现对Excel数据的读写操作,无需直接依赖于Excel的API。下面我们将深入探讨如何通过ODBC方法实现对Excel的读写,并分析这种方法的优缺点。 首先,我们需要了解ODBC的基本概念。ODBC由驱动...

    C++中用ODBC和ADO方式连接SQL数据库

    在C++中,连接SQL数据库通常有两种主要方法:ODBC(Open Database Connectivity)和ADO(ActiveX Data Objects)。这两种技术都是用于访问不同数据库系统的方法,允许C++程序与各种数据库进行交互。 ODBC是一种标准...

Global site tag (gtag.js) - Google Analytics