Microsoft VC ODBC使用总结
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);。
Visual C++ 6.0连接SQLServer 2005数据库的ADO方法

(1)Windows环境下,ODBC数据源的配置方法:1)开始→设置→控制面板→管理工具→双击“数据源(ODBC)”。
2)在ODBC数据源管理器中,单击“系统DSN”标签;单击“添加(D)”按钮,并在“列表框”中选择“SQL Server”,然后单击“完成”。
如果已经存在现有的数据源,则选择指定的数据源后,单击“配置”,转向对该数据源进行重新配置。
3)在创建到SQL Server新数据源窗口(如图10-4)中的“名称(M):”右侧,输入:VCSQLServer2005;“描述(D):”右侧,输入:VC SQL Server 2005;“服务器(S):”右侧,输入:指定服务器的位置和名称(通常使用默认服务器,输入一个英文字符半角圆点.)。
图10-4 ODBC数据源设置4)在创建到SQL Server新数据源窗口中,单击“下一步(N)>”,选择“使用网络登录ID的Windows NT验证(W)”或者“使用用户输入登录ID和密码的SQL Server(S)”(默认选择前者),然后单击“下一步(N)>”。
5)在创建到SQL Server新数据源窗口中,勾选“更改默认的数据库为(D):”,并在其下方的下拉列表框中,选择用户连接的默认数据库(本例选择:VcSqlAdoDB),然后单击“下一步(N)>”,再单击“完成”。
6)在ODBC Microsoft SQL Server安装窗口中,单击“测试数据源(T)…”,等待测试成功后,单击“确定”完成数据源配置。
(2)Windows环境下,Visual C++ 6.0连接SQLServer 2005数据库的ADO方法:1)引入ADO库定义文件,初始化COM库使用# import把动态连接库msado15.dll导入Visual C++应用程序,并生成定义ADO库的两个C++头文件:msado15.tlh和ado15.tli。
即:# import "c:Program FilesCommon FilesSystemADOmsado15.dll"no_namespace rename("EOF","EndOfFile")使用CoInitialize ()初始化COM库。
在VC中用ODBC实现LOB数据在多种数据库中的统一读写

本 文将 以 O B D C作 为 数 据 库 接 口 , 阐述 如 何 用 O B D C实 现 L B数 据 在 不 同 类 型 的 数 据 库 中 的 统 一 读 写 ,并 在 V 6 0中 O C.
实现。
I
一
、
O C简 介 DB
O B ( p nD tbs o nci ,开 放 式 数 据 库 连 接 )是 D C O e aaaeC n et n o
数据 库 。
关键字
1
一
I -—
.
、
l目
Widw 平 台 下 的 数 据 库 客 户 技 术 近 年 来 发 展 十 分 迅 速 。 no s 有 关 数据 库 开发 的技 术 包 括 O B D C、 MF D C 类 、 D O、 CO B A
O ED L B和 A O等 ,这些技术 在实际开发 中都常常被使 用 。 D
8 0年 代 末 9 0年 代 初 出 现 的 技 术 ,它 为 编 写 关 系 型 数 据 库 的 客 户 端 应 用 提 供 了 一 种 统 一 接 口 ,从 而 屏 蔽 了不 同 数 据 库 系 统 的 异 构 性 。 O C提 供 了 一 系 列 单 一 的 A I 数 作 为 低 层 的数 据 DB P函 库 接 口 ,它 在 相 对 较 低 的 层 次 上 使 客 户 应 用 程 序 能 操 作 或 控 制
定长 的字段 ,这些数据 处理起来 相对简单一些 。但在一些 较为
复 杂 的应 用 中常 常 要 处 理 图像 、声 音 等 多 媒 体 数 据 , 它们 统 一 称 为大二 进制 对 象 (O L B,L n i r O jc)数 据 ,这 些 数 ogBn y bet a 据 在 处 理 上 有 一 定 的 特 殊 性 , 和 普 通 的 定 长 字 段 处 理 有 所 不
ODBC详解

下面对上述步骤做详细的介绍。
5.2.1步骤1:连接数据源
为了连接数据源,必须要建立一个数据源连接的环境句柄。通过调用SQLAllocEnv函数实现对环境句柄的分配,在ODBC 3.0里,这个函数已经被SQLAllocHandle取代,但是熟悉ODBC API的开发人员还是习惯用这个函数建立环境句柄,因为VC++开发平台有一个映射服务,这个服务将程序代码对函数SQLAllocEnv的调用转向对函数SQLAllocHandle的调用。
通过调用如下代码可以通过应用程序动态创建数据源MYDB:
BOOL CreateDSN()
{
char* szDesc;
int mlen;
szDesc=new char[256];
sprintf(szDesc,"DSN=%s: DESCRIPTION=TOC support source: \
DBQ=%s: FIL=MicrosoftAccess: \
{
//执行其它操作
…………
}
retcode = :: SQLExecute (hstmt, (UCHAR*)pszSQL, SQL_NTS );
if(rcode == SQL_SUCCESS) // SQL语句执行成功
{
//执行其它操作
…………
}
5.2.4步骤4:获取结果集
SQL语句执行成功以后,应用程序必须准备接收数据,应用程序需要把SQL语句执行结果绑定到一个本地缓存变量里。但是SQL执行语句执行的结果并不是直接传送给应用程序,而是在应用程序准备接收数据的时候通知驱动程序其已经准备好接收数据,应用程序通过调用SQLFetch函数返回结果集的一行数据。
ODBC介绍

ODBC介绍一、什么是ODBCODBC(Open Database Connectivity)是“开放式数据库互连”的简称,由微软提出,是一种使用SQL的应用程序接口(API),用户可以添加数据库驱动程序,将您的应用程序链接到自己的数据库管理系统。
ODBC的最大优点是能以统一的方式处理所有的数据库,用它生成的程序与数据库无关。
二、ODBC驱动1.查看系统所安装的ODBC驱动程序:“开始”/“设置”/“控制面板”/“管理工具”/“数据源 (ODBC)”/“驱动程序”。
2.若系统所安装的ODBC驱动程序里没有你想要的ODBC驱动,如Oracle的ODBC驱动,只需正常的安装ORACLE软件,系统会自动的将ORACLE对应的驱动程序加载到ODBC驱动程序里面。
三、数据源1.创建数据源“开始”/“设置”/“控制面板”/“管理工具”/“数据源 (ODBC)”/“添加”数据源添加完成后,名称项下的所有项都为已创建好的数据源。
2. 配置数据源(修改数据源名、说明及所指数据库)“开始”/“设置”/“控制面板”/“管理工具”/“数据源 (ODBC)”/“配置”根据选择的数据源,单击“配置”会打开数据源所对应的配置窗口(如下图)。
3. 删除数据源“开始”/“设置”/“控制面板”/“管理工具”/“数据源 (ODBC)”/“删除”选择将要删除的数据源,单击“删除”,出现删除确认窗口,选择“是”则成功删除所选择的数据源。
实例1:为SQL数据库(FXBBDATA.MDB)创建ODBC数据源。
1、“开始”/“设置”/“控制面板”/“管理工具”/“数据源 (ODBC)”,出现“ODBC数据源管理器”窗口2、单击“添加”按钮,选择SQL驱动程序,单击“完成”3、出现“创建到SQL Server 的新数据源”窗口,输入数据源名称、描述、选择要连接到的SQL Server服务器,单击“下一步”4、出现“创建到SQL Server的新数据源”窗口,设置完后单击“下一步”注意:若在此处选择“使用用户输入登录ID和密码的SQL Server 验证”。
ODBC数据库接口的介绍

ODBC数据库接口的介绍什么是ODBCMcrosoft推出的ODBC(Open Database Connectivity)技术为异质数据库的访问提供了统一的接口。
ODBC基于SQL(Structured Query Language),并把它作为访问数据库的标准。
这个接口提供了最大限度的相互可操作性:一个应用程序可以通过一组通用的代码访问不同的数据库管理系统。
一个软件开发者开发的客户/服务器应用程序不会被束定于某个特定的数据库之上。
ODBC可以为不同的数据库提供相应的驱动程序。
ODBC的灵活性表现在以下几个方面:♦应用程序不会受制于某种专用的API;♦ SQL语句以源代码的方式直接嵌入在应用程序中;♦应用程序可以以自己的格式接收和发送数据;♦ ODBC的设计完全和ISO Call-Level Interface兼容;♦现在的ODBC数据库驱动程序支持55家公司的数据产品;ODBC的名词术语ODBC驱动程序:是一个动态链接库(DLL),用以将特定的开放式数据库连接的数据源和另一个应用程序(客户端)相连接。
ODBC数据源:作为数据源使用的数据库或数据库服务器。
ODBC数据源通过它们的数据源名称来引用,或者通过具体引用ODBC驱动程序和服务器名称来引用。
可以在Windows的控制面板中使用ODBC 管理程序或rdoRegisterDataSource(一个ODBC API)方法来注册命名的数据源。
ODBC驱动程序管理器:提供从主机语言到特定后端数据源驱动程序的接口。
ODBC API:数据库厂商为程序设计者提供的直接访问数据库的一组函数。
注意:这里要指出的是,虽然ODBC API提供了很多很方便而且强大的功能。
但是ODBC API都比较难学,而且使用很容易出错。
虽然允许用ODBC API来操作ODBC句柄,如果不正确使用ODBC API,可能会导致不可预知的错误。
配置ODBC数据源ODBC管理器(Administrator)它负责安装驱动程序,管理数据源,并帮助程序员跟踪ODBC的函数调用。
VC++操作EXCEL表格,附带两个小例子
C++读取Excel的XLS文件的方法有很多,但是也许就是因为方法太多,大家在选择的时候会很疑惑。
由于前两天要做导表工具,比较了常用的方法,总结一下写个短文,1.OLE的方式这个大约是最常用的方式,这个方式其实启动了一个EXCEL的进程在背后读写EXCEL 文件,这个方式的最大好处是什么事情都能做。
包括设置EXCEL的格式,增加删除Sheet,读写单元格,等等。
功能几乎是最全的,而且使用起来也不是特别的难。
其基本方法都是使用导出的.h文件进行OLE操作,但是由于OLE的接口说明文档不多,想非常完美的使用她们也不是太容易,好在例子也很多。
网上普遍认为OLE速度慢,EXCEL的OLE读写方式也基本一样。
但是读取速度可以改进,如果在读取的加载整个Sheet的Range的全部数据,而不是一个个单元格读取,那么速度还是相对不错。
想想原理也很简单,整体读取减少了OLE的交互次数。
OLE的写入方式一般只能几个进行比较方便,所以速度可能要快很多。
我自己的亲身体会是,一个EXCEL文件,100多列的字段,如果采用一个个单元格的读取方式,1s大约3条左右的记录,如果整体读取,速度可以提高几十倍。
OLE读写EXCEL方式功能很强大,读取速度还可以,但写入速度不高,当然这个方式不可能移植的,而且你必须安装了EXCEL。
2.Basic EXCEL 方式这是CodeProject上的一个推荐开源工程了,/KB/office/BasicExcel.aspx作者是基于EXCEL的文件格式进行的处理。
但是为什么叫Basic EXCEL呢。
他不支持很多东西,公式,文件格式,表格合并等(有人说中文支持也不好),所以可以认为他只支持最基本的EXCEL表格,我自己的尝试是如果这个EXCEL文件有其他元素(公式,格式等),使用Basic EXCEL读取会失败。
OLE读写EXCEL方式功能比较弱,由于是直接根据文件格式操作,读写速度都不错,你也不需要按照EXCEL,另外这个方式是可以移植的,但是有一些成本,其代码比较晦涩难懂,而且没有注释,另外即使在Windows平台上,告警也很多。
数据库接口技术——ODBC
ODBC的产生 的产生
PKU
1991年11月,微软宣布了ODBC,次年推出 可用版本. 1992年2月,推出了ODBC SDK 2.0版. ODBC基于SAG的SQL CAE草案所规定的语法, 共分为Core,Level 1, Level 2三种定义, 分别规范了22,16,13共51条命令,其中 29条命令甚至超越了SAG CLI中原有的定义, 功能强大而灵活.它还包括标准的错误代 码集,标准的连接和登录DBMS方法,标准 的数据类型表示等.
数据源的组成
PKU
数据
数据源
网络环境
操作系统
DBMS
ODBC的接口函数 的接口函数
PKU
I. 连接数据源(Connecting to a Data Source)
SQLAllocEnv SQLAllocConnect SQLConnect SQLPriverConnect SQLBrowseConnect
II. 取得驱动程序及数据源的相关讯息
SQLDataSource SQLGetInfo SQLGetFunctions SQLGetTypeInfo.
III. 设定及取得驱动程序的选项
SQLSetConnectOption SQLGetConnectOption SQLSetStmtOption SQLGetStmtOption.
PKU
应用程序
Application
驱动程序管理器
Drive manager
驱动程序
Drive
数据源
Data sourse
应用程序层
PKU
使用ODBC接口的应用程序可执行以下任务: 使用ODBC接口的应用程序可执行以下任务: ODBC接口的应用程序可执行以下任务
vb odbc语法
在Visual Basic (VB) 中,使用ODBC (Open Database Connectivity) 连接数据库通常涉及使用 ODBC 数据源名称(DSN)。
以下是一个基本的步骤,用于在 VB 中使用 ODBC 连接到一个数据库:1. **安装和配置 ODBC 数据源**:* 首先,您需要在系统上安装适当的 ODBC 驱动程序。
这取决于您要连接的数据库类型(例如 MySQL、SQL Server、Oracle 等)。
* 创建或配置一个 ODBC 数据源。
这通常在“控制面板”中的“管理工具”中的“ODBC 数据源(32位)”或“ODBC 数据源(64位)”完成。
2. **在 VB 项目中设置引用**:* 在 VB 开发环境中,您需要添加对 `Microsoft ODBC [类型] Driver [版本] Object Library` 的引用。
例如,如果您使用的是 MySQL,您可能需要添加对 `Microsoft ODBC for MySQL` 的引用。
3. **编写代码以建立连接**:```vbDim conn As New Odbc.OdbcConnectionDim connStr As StringconnStr = "DRIVER={你的DSN名称};SERVER={服务器地址};DATABASE={数据库名};UID={用户名};PWD={密码}"conn.Open(connStr)```4. **执行 SQL 查询**:```vbDim cmd As New Odbc.OdbcCommand("SELECT * FROM your_table", conn)Dim reader As Odbc.OdbcDataReader = cmd.ExecuteReader()While reader.Read()Console.WriteLine(String.Format("{0}, {1}", reader(0), reader(1))) ' 假设有两列数据End While```5. **关闭连接**:```vbreader.Close()conn.Close()```6. **错误处理**:不要忘记添加错误处理代码,以处理可能出现的任何数据库连接或查询错误。
c++中使用ODBC连接数据库
12.1.2配置ODBC数据源
配置ODBC数据源的步骤如下: (1)在Windows控制面板中双击“管理工具” 图标,在弹出的窗 口中能找到“数据源ODBC”图标,并双击,弹出数据源管 理器对话框,如图12-2所示。
(2)在ODBC数据源管理器对话框中选系统DSN或用户DSN, 用户DSN表示用户数据源只对当前用户可见,而且只能用 于当前机器上。系统DSN表示系统数据源对当前机器上的 所有用户可见。击添加,出现创建新数据源对话框,如图 12-3所示。
关闭一个CRecordset数据库
判断数据源是否支持翻阅的功能,要是支持就返回非零值, 否则返回零值 判断是否数据源能够更新。要是能够更新,就返回非零值, 否则返回零值 用来得到数据库中的记录的个数,返回值就是记录的个数 用来得到数据源的状态,它是通过一个CRecordsetStatus 类型的指针来返回的 判断数据源是否打开了,要是打开了,就返回非零值,否则 返回为零值
在构造CRecordset类后,在调用Open函数之前,使用这个Cstring型的 变量来指明排序的字段
表12-2 记录集类的成员函数
成员函数
Open
说明
打开一个数据源,成功返回非零值,否则返回零值
Close
CanScroll CanUpdate GetRecordCount GetStatus IsOpen
•
图12-7MFC应用程序向导的步骤2
表12-4 4个选项的说明
选项
否
的常用操作,并在“文件”菜 单中有“新建”、“打开”、“保存”、 “另存为”等命令。 除了在StdAfx.h文件中添加了“#include <afxdb.h>”语句外,其余与“None” 选项相同 不支持文档的常用操作,也就是说,创 建的文档类不能进行序列化,且在“文 件”菜单中没有“新建”等文档操作命 令。但用户可在用户视图在中使用 Crecordset类处理数据库 全面支持文档操作和数据库操作
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
1.打开数据库 CDatabase database;
database.OpenEx( _T( "DSN=zhuxue" ),CDatabase::noOdbcDialog);//zhuxue 为数据源名称 2.关联记录集 CRecordset recset(database); 3.查询记录CString sSql1=""; sSql1 = "SELECT * FROM tablename" ;
recset.Open(CRecordset::fo
1.打开数据库
CDatabase database;
database.OpenEx( _T( "DSN=zhuxue" ),CDatabase::noOdbcDialog);//zhuxue 为数据源名称
2.关联记录集
CRecordset recset(&database);
3.查询记录
CString sSql1="";
sSql1 = "SELECT * FROM tablename" ;
recset.Open(CRecordset::forwardOnly, sSql1, CRecordset::readOnly);
int ti=0;
CDBVariant var;//var能够转换为其他类型的值
while (!recset.IsEOF())
{
//读取Excel内部数值
recset.GetFieldValue("id",var);
jiangxiang[ti].id=var.m_iVal;
recset.GetFieldValue("name", jiangxiang[ti].name);
ti ;
recset.MoveNext();
}
recset.Close();//关闭记录集
4.执行sql语句
CString sSql="";
sSql ="delete * from 院系审核";//清空表
database.ExecuteSQL(sSql);
sSql也能够为Insert ,Update等语句
5.读取字段名
sSql = "SELECT * FROM Sheet1" ; //读取的文档有Sheet1表的定义,或为本程式生成的表.
// 执行查询语句
recset.Open(CRecordset::forwardOnly, sSql, CRecordset::readOnly);
int excelColCount=recset.GetODBCFieldCount();//列数
CString excelfield[30];
//得到记录集的字段集合中的字段的总个数
for( i=0;i<excelColCount;i )
{
CODBCFieldInfo fieldinfo;
recset.GetODBCFieldInfo(i,fieldinfo);
excelfield[i].name =fieldinfo.m_strName;//字段名
}
6.打开excel文档
CString sDriver = "MICROSOFT EXCEL DRIVER (*.XLS)"; // Excel安装驱动CString sSql,sExcelFile; //sExcelFile为excel的文档路径
TRY
{
// 创建进行存取的字符串
sSql.Format("DRIVER={%s};DSN='';FIRSTROWHASNAMES=1;READONLY=FALSE;CRE ATE_DB=\"%s\";DBQ=%s",sDriver, sExcelFile, sExcelFile);
// 创建数据库 (既Excel表格文档)
if( database.OpenEx(sSql,CDatabase::noOdbcDialog) )
{
//能够把excel作为一个数据库操作
}
}
catch(e)
{
TRACE1("Excel驱动没有安装: %s",sDriver);
AfxMessageBox("读取失败,请检查是否定义数据区Sheet1");
}。