AD编程的c语言基本编程方法

ADO编程详解(C++)----初级入门篇 - 推酷
ADO编程详解(C++)----初级入门篇
Microsoft ActiveXData Object
之后,基于
技术的一种数据库操作技术,使您能够编写通过
提供者对在数据库服务器中的数据进行访问和操作的应用程序。
、数据库之间的关系可以用下图来表示:
其主要优点是易于使用、高速度、低内存支出和占用磁盘空间较少。
支持用于建立基于客户端
的应用程序的主要功能。
在此介绍的
编程技术都是基于
的,要熟练掌握如何用
操作数据库,首先对
技术得有个总体的了解,
主要由几个对象组成
Connection
Paramenter
Recorderset
对象,对数据库的操作,都是通过这几个对象来进行的,对象模型的关系图如下:
在数据库应用里操作数据源都必须通过该对象,这是数据交换的环境。
Connection
对象代表了同数据源的一个会话,在客户
服务器模型里,这个会话相当于同服务器的一次网络连接。不同的数据提供者提供的该对象的集合、方法和属性不同。
Connection
对象的集合、方法和属性,可以使用
方法建立和释放一个数据源连接。使用
方法可以执行一个数据操作命令,使用
BeginTrans
CommitTrans
RollbackTrans
方法可以启动、提交和回滚一个处理事务。通过操作
the Errors
集合可以获取和处理错误信息,操作
CommandTimeout
属性可以设置连接的溢出时间,操作
ConnectionString
属性可以设置连接的字符串,操作
属性可以设置连接的模式,操作
属性可以指定
对象是一个对数据源执行命令的定义,使用该对象可以查询数据库并返回一个
对象,可以执行一个批量的数据操作,可以操作数据库的结构。不同的数据提供者提供的该对象的集合、方法和属性不同。
对象的集合、方法和属性,可以使用
集合制定命令的参数,可以使用
方法执行一个查询并将查询结果返回到一个
对象里,操作
属性可以为该对象指定一个命令的文本,操作
属性可以指定命令的类型,操作
可以得知数据提供者是否准备好命令的执行,操作
属性可以设置命令执行的溢出时间。
对象中用于指定参数化查询或者存储过程的参数。大多数数据提供者支持参数化命令,这些命令往往是已经定义好了的,只是在执行过程中调整参数的内容。
对象的集合、方法和属性,可以通过设置
属性指定参数的名称,通过设置
属性可以指定参数的值,通过设置
属性可以指定参数的信息,通过执行
方法可以将数据传递到参数里。
如果执行的命令是一个查询并返回存放在表中的结果集,这些结果集将被保存在本地的存储区里,
对象是执行这种存储的
对象。通过
对象可以操纵来自数据提供者的数据,包括修改和更新行、插入和删除行。
定义了如表
允许添加、修改和删除记录,支持所有方式的光标移动,其他用户的修改可以在联机以后仍然可见
光标,它支持所有类型的光标移动,但是建立连接以后其他用户对记录的添加不可见,其他用户对记录的删除和对数据的修改是可见的。支持书签操作
支持各种方式的光标移动,但是建立连接以后其他用户的行添加、行删除和数据修改都不可见,支持书签操作
只允许向前存取,而且在建立连接以后,其他用户的行添加、行删除和数据修改都不可见,支持书签操作
定义了如表
(缺省)数据只读
锁定操作的所有行,也称为消极锁定
方法时锁定操作的行,也称为积极锁定
在批量更新时使用该锁定,也称为积极批量锁定
定义了如表
光标服务位置
不使用光标服务位置
使用客户端光标
(缺省)使用数据服务端或者驱动提供端光标
对象的集合、方法和属性,可以通过设置
CursorType
属性设置记录集的光标类型,通过设置
CursorLocation
属性可以指定光标位置,通过读取
属性的值,获知当前光标在记录集里的位置是在最前或者最后,通过执行
MovePrevious
方法移动记录集里的光标,通过执行
方法可以更新数据修改,通过执行
方法可以执行行插入操作,通过执行
方法可以删除行。
对象的一个行由一个或者多个
对象组成,如果把一个
对象看成一个二维网格表,那么
对象就是这些列。这些列里保存了列的名称、数据类型和值,这些值是来自数据源的真正数据。为了修改数据源里的数据,必须首先修改
对象各个行里
对象里的值,最后
对象将这些修改提交到数据源。
对象的集合、方法和属性,可以通过读取
属性,获知列的名称。通过操作
属性可以改变列的值,通过读取
NumericScale
属性,可获知列的数据类型、精度和小数位的个数,通过执行
AppendChunk
方法可以操作列的值。
对象包含了
数据操作时发生错误的详细描述,
的任何对象都可以产生一个或者多个数据提供者错误,当错误发生时,这些错误对象被添加到
Connection
集合里。当另外一个
对象产生一个错误时,
对象被清除,新的
对象将被添加到
对象的集合、方法和属性,可以通过读取
属性,获得
错误号码和对错误的描述,通过读取
属性得知错误发生的源。
对象代表了一个由提供者定义的
对象的动态特征。
对象有两种类型的
对象:内置的和动态的。内置的
对象是指那些在
里实现的在对象创建时立即可见的属性,可以通过域作用符直接操作这些属性。动态的
对象是指由数据提供者定义的底层的属性,这些属性出现在
Properties
集合里,例如,如果一个
对象支持事务和更新,这些属性将作为
对象出现在
Properties
集合里。动态属性必须通过集合进行引用,比如使用下面的语法:
MyObject.Properties(0)
MyObject.Properties(&Name&)
不能删除任何类型的属性对象。借助于
对象的集合、方法和属性,可以通过读取
属性获得属性的名称,通过读取
属性获取属性的数据类型,通过读取
属性获取属性的值。
通常情况下,一个基于
的数据库应用使用如下过程操作数据源里的数据:
Connection
对象。定义用于连接的字符串信息,包括数据源名称、用户
、口令、连接超时、缺省数据库以及光标的位置。一个
Connection
对象代表了同数据源的一次会话。可以通过
Connection
对象控制事务,即执行
BeginTrans
CommitTrans
RollbackTrans
打开数据源,建立同数据源的连接。
命令。一旦连接成功,就可以运行查询了。可以以异步方式运行查询,也可以异步地处理查询结果,
会通知提供者后台提供数据。这样可以让应用程序继续处理其它事情而不必等待。
使用结果集。完成了查询以后,结果集就可以被应用程序使用了。在不同的光标类型下,可以在客户端或者服务器端浏览和修改行数据。
终止连接。当完成了所有数据操作后,可以销毁这个同数据源的连接。
首先说句题外话,关于
各个对象的使用,可查看《
帮助文档》,如下是文档下载链接:
封装的,要使用
,首先得引入其
类型库的方法有多种,在此我们就介绍一种
通过预处理指令
引入。一般情况下,在
操作系统的
Program Files\Common Files\System\ado
目录下都有一个
msado*.dll
该文件可以是
msado1.dll
msado15.dll
msado2.dll
,对于此文件,版本不一样,可能导致一些冲突,如:系统自带的
msado*.dll
可能与程序编译所用的版本不一样,可能会导致一些异常,那么对于这种情况,我个人一般的做法是,在软件目录下面带上
msado*.dll
文件,这样就排除了对软件运行环境的依赖。
类型库引入后,程序在编译过程中,
msado*.dll
中的类型库信息,自动产生两个该类型库的头文件和实现文件
msado15.tlh
msado15.tli
目录下)。在这两个文件里定义了
的所有对象和方法,以及一些枚举型的常量等。以下是引入方法:
收下引入命令会导致
警告,通过些命令去除
#pragma warning(disable:4146)
引号里面的路径,可绝对的,可相对的
#import&..\CommFile\Lib\msado15.dll& named_guids \
以免与其他命名空间冲突
rename(&EOF&,&adoEOF&),rename(&BOF&,&adoBOF&)
#pragma warning(default:4146)
using namespace ADODB;
组件,使用任何
组件的时候,都要先初始化
,其实就是在使用
组件前调用一个
API----CoInitialize()
对象之前调用即可,以下为代码:
HRESULT hr =CoInitialize(NULL);
ASSERT(SUCCEEDED(hr));//
返回值可判断初始化
是否成功,请用
一般情况下,使用完
之后,调用反初始化
----CoUninitialize()
。一般会在数据库访问封装类的析构函数中调用。
连接数据库
通过创建连接对象连接数据库,首先创建一个指向
Connection
_ConnectionPtr
,以下是创建连接的源码:
_ConnectionPtr
HRESULT hr =CoInitialize(NULL);
ASSERT(SUCCEEDED(hr));
if (NULL ==m_pConn) {
//Connecting
&&&&&&&&&&&&&&&&&&
if ( !FAILED(m_pConn.CreateInstance(_uuidof(Connection)))){ //
设置连接超时时间
&&&&&&&&&&&&&&&&&&&&&&&&&&&
m_pConn-&CommandTimeout= 30;
&&&&&&&&&&&&&&&&&
设置连接超时值,单位为秒
&&&&&&&&&&&&&&&&&&&&&&&&&&&
if (!FAILED(m_pConn-&Open((_bstr_t)(m_szConnStr), &&, &&,adModeUnknown)))
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
&&&&&&&&&&&&&&&&&&
catch(_com_error e){
&&&&&&&&&&&&&&&&&&
char szLog[MAX_BUFF];memset(szLog, 0, MAX_BUFF);
&&&&&&&&&&&&&&&&&&
sprintf(szLog, &
连接数据库错误
:%s\n&,(char *)(e.Description()));
第一个参数就是连接串,这个连接串如何获得?
中有工具,不过太过麻烦,而且获得的串还得复制,不方便,下面介绍一种方便实用获得连接串的方法。
创建一个记事本文件,把文件名
包括扩展名
”,双击打开,如下
第一个红色框里有三个记录,针对
数据库可选前三项中的一项。
数据库选第二个框,第三个框是对
数据库的。自己所连的数据库是什么类型,自己选择,然后点下一步,如图:
第一个框输入数据库所在服务器的
,或者计算机名,或者域名之类,第二个框输入登录数据库的用户名与密码,勾上第三个框中的复选框,这时,如果你上面几项的资料都没错的话,
第四个框中会出现你所连接的数据库中的所有的库名,然后你选一个你所要连接的库,点击第五个框中的“测试连接”按钮,如果弹出连接成功之类的提示,那么恭喜,成功了,点“确定”按钮关闭窗口,再以记事本方式打开此文件,你就会看到你所需的连接串了,效果图如下:
红色框中的串就是连接串,把这一串数据复制下来,赋给
方法中的第一个参数,就
了,但是这是不是还是有点麻烦呀,要复制来复制去的,这还有更便捷的方法,以上方法不变,只是使用连接串的方法做些改进,只要把“
”文件的路径赋给
方法的第一个参数即可,如下:
char szUdlPath[] ={&.\\Test.udl&};//
可相对路径,亦可绝对路径
sprintf(m_szConnStr,&File Name=%s&, szUdlPath);//
前面是固定格式
按这种方法,发行软件的时候,只要相应目录下,放一个“
”文件即可,数据库的连接可自由配制,是不是相当便捷实用呀。
获得记录集
Connection
对象一样,首先是创建一个
对象指针,再创建对象
if(!FAILED(m_pRecord.CreateInstance(__uuidof(Recordset)))) {
&&&&&&&&&&&&&&&&&&
HRESULT hr = 0;
&&&&&&&&&&&&&&&&&&
当连接断开,或者连接对象没有连接的情况下,通过连接串获得记录集
&&&&&&&&&&&&&&&&&&
if (NULL == m_pConn ||adStateClosed == m_pConn-&State)
&&&&&&&&&&&&&&&&&&&&&&&&&&&
hr =m_pRecord-&Open((_bstr_t)szSQL, _variant_t(m_szConnStr),
adOpenKeyset, adLockOptimistic,adCmdText);
&&&&&&&&&&&&&&&&&&
连接对象处理正常连接状态下,直接使用
&&&&&&&&&&&&&&&&&&&&&&&&&&&
hr = m_pRecord-&Open((_bstr_t)szSQL,m_pConn.GetInterfacePtr(), adOpenKeyset,
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
adLockOptimistic,adCmdText);
&&&&&&&&&&&&&&&&&&
if (SUCCEEDED(hr))
&&&&&&&&&&&&&&&&&&&&&&&&&&&
catch (_com_errore)
char szLog[MAX_BUFF]; memset(szLog, 0,MAX_BUFF);
sprintf(szLog, &
查询命令错误
:%s[%s]&,(char *)(e.Description()), szSQL);
以上代码中的
串,就是查询语句,
方式,第一种是连接对象断开,或者没连接状态下,通过连接串获得记录集,第二种连接正常情况下,那么无需再连接,直接通过连接对象获得连接信息。至此,记住集已成功获得,下面是怎么提取数据的问题了。
while(!IsRecordEOF()){//
判断是否到了记录结尾
UINT nCarID = 0;
char sCarMark[MAX_BUFF];memset(sCarMark, 0, MAX_BUFF);
CollectMsg(&CARID&
&&&&&&&&&&&&&&&&&
&&&&&&&&&&&&&&&&
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
第一个参数,传列名
CollectMsg(&Car_Mark&
&&&&&&&&&&
&&&&&&&&&&&&&&&&
RecordMoveNext();//
移动到下一个记录
CloseRecord ();//
关闭记录集
以下代码是以上代码的函数实现:
IsRecordEOF()
bool bResult =
if (NULL != m_pRecord) {
&&&&&&&&&&&&&&&&&&
if (!m_pRecord-&adoEOF)
&&&&&&&&&&&&&&&&&&&&&&&&&&&
CollectMsg(const char *szColumnName, int&iTemp
&&&&&&&&&&&
bool bResult =
if (adStateClosed !=m_pRecord-&State) {
&&&&&&&&&&&&&&&&&&
&&&&&&&&&&&&&&&&&&&&&&&&&&&
_variant_t Column(szColumnName);
&&&&&&&&&&&&&&&&&&&&&&&&&&&
_variant_t RusultGet= m_pRecord-&Fields-&GetItem(Column)-&V
&&&&&&&&&&&&&&&&&&&&&&&&&&&
iTemp =RusultGet.intV
&&&&&&&&&&&&&&&&&&&&&&&&&&&
&&&&&&&&&&&&&&&&&&
&&&&&&&&&&&&&&&&&&
catch(_com_error e){
&&&&&&&&&&&&&&&&&&&&&&&&&&&
charszLog[MAX_BUFF]; memset(szLog, 0, MAX_BUFF);
&&&&&&&&&&&&&&&&&&&&&&&&&&&
sprintf(szLog,&%s&, (char *)(e.Description()));
&&&&&&&&&&&&&&&&&&&&&&&&&&&
m_WriteLog.WriteLog(szLog,strlen(szLog), LOG_ERR);
&&&&&&&&&&&&&&&&&&
CollectMsg(const char *szColumnName, char*szBuff, int nBuffSize)
bool bResult =
if (adStateClosed !=m_pRecord-&State) {
&&&&&&&&&&&&&&&&&&
&&&&&&&&&&&&&&&&&&&&&&&&&&&
_variant_t Column(szColumnName);
&&&&&&&&&&&&&&&&&&&&&&&&&&&
_variant_t RusultGet= m_pRecord-&Fields-&GetItem(Column)-&V
&&&&&&&&&&&&&&&&&&&&&&&&&&&
WideCharToMultiByte(CP_ACP,0, RusultGet.bstrVal, -1, szBuff, nBuffSize,
NULL, NULL);
&&&&&&&&&&&&&&&&&&&&&&&&&&&
&&&&&&&&&&&&&&&&&&
&&&&&&&&&&&&&&&&&&
catch(_com_error e){
&&&&&&&&&&&&&&&&&&&&&&&&&&&
charszLog[MAX_BUFF]; memset(szLog, 0, MAX_BUFF);
&&&&&&&&&&&&&&&&&&&&&&&&&&&
sprintf(szLog,&%s&, (char *)(e.Description()));
&&&&&&&&&&&&&&&&&&&&&&&&&&&
m_WriteLog.WriteLog(szLog,strlen(szLog), LOG_ERR);
&&&&&&&&&&&&&&&&&&
RecordMoveNext()
bool bResult =
if (NULL != m_pRecord) {
&&&&&&&&&&&&&&&&&&
if (!m_pRecord-&adoEOF) {
&&&&&&&&&&&&&&&&&&&&&&&&&&&
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
m_pRecord-&MoveNext();
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
&&&&&&&&&&&&&&&&&&&&&&&&&&&
&&&&&&&&&&&&&&&&&&&&&&&&&&&
catch(_com_error e){
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
charszLog[MAX_BUFF]; memset(szLog, 0, MAX_BUFF);
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
sprintf(szLog,&RecordMoveNext
:%s\n&, (char *)(e.Description()));
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
m_WriteLog.WriteLog(szLog,strlen(szLog), LOG_ERR);
&&&&&&&&&&&&&&&&&&&&&&&&&&&
&&&&&&&&&&&&&&&&&&
CloseRecord
&&&&&&&&&&&&&&&&&&
if (NULL != m_pRecord){
&&&&&&&&&&&&&&&&&&&&&&&&&&&
m_pRecord-&Close();
&&&&&&&&&&&&&&&&&&&&&&&&&&&
m_pRecord = NULL;
&&&&&&&&&&&&&&&&&&
catch(_com_error e){
&&&&&&&&&&&&&&&&&&
char szLog[MAX_BUFF];memset(szLog, 0, MAX_BUFF);
&&&&&&&&&&&&&&&&&&
sprintf(szLog, &
关闭数据记录集错误
:%s\n&,(char *)(e.Description()));
&&&&&&&&&&&&&&&&&&
m_WriteLog.WriteLog(szLog,strlen(szLog), LOG_ERR);
对象来执行命令,也可以直接通过
Connection
对象来执行,以下介绍通过
Connection
对象来执行命令,命令可以是
命令等,以下是代码:
第一个参数是要执行的命令,第二个参数用来返回影响的行数
ExecuteSQL(const char *szSQLStr, long&nRefreshNum){
bool bResult =
if (strlen(szSQLStr) & 0) {
&&&&&&&&&&&&&&&&&&
if (NULL == m_pConn ||adStateClosed == m_pConn-&State)
&&&&&&&&&&&&&&&&&&&&&&&&&&&
&&&&&&&&&&&&&&&&&&
&&&&&&&&&&&&&&&&&&
&&&&&&&&&&&&&&&&&&&&&&&&&&&
_variant_tRefreshN
&&&&&&&&&&&&&&&&&&&&&&&&&&&
m_pConn-&Execute(_bstr_t(szSQLStr),&RefreshNum, adCmdText);
&&&&&&&&&&&&&&&&&&&&&&&&&&&
&&&&&&&&&&&&&&&&&&&&&&&&&&&
nRefreshNum =RefreshNum.lV
&&&&&&&&&&&&&&&&&&
&&&&&&&&&&&&&&&&&&
catch (_com_error e)
&&&&&&&&&&&&&&&&&&
&&&&&&&&&&&&&&&&&&&&&&&&&&&
nRefreshNum = 0;
&&&&&&&&&&&&&&&&&&&&&&&&&&&
charszLog[MAX_BUFF]; memset(szLog, 0, MAX_BUFF);
&&&&&&&&&&&&&&&&&&&&&&&&&&&
sprintf(szLog,&
:%s[%s]&, (char *)(e.Description()), szSQLStr);
&&&&&&&&&&&&&&&&&&&&&&&&&&&
m_WriteLog.WriteLog(szLog,strlen(szLog), LOG_ERR);
&&&&&&&&&&&&&&&&&&
关闭连接、记录集
连接对象与记录集使用完之后,要关闭:
if (NULL !=m_pConn)
m_pConn-&Close();
if (NULL !=m_pRecord){
m_pRecord-&Close();
本人对数据库访问、操作初步封装了一个简单的类,进行了初步错误处理,下载链接:
以下是部份代码
头文件部份:
/*****************************************************************************
数据库封装类
&&&&&&&&&&&&&&&&&&
&&&&&&&&&&&&&&&&&&
:宽窄字符环境兼容性处理
&&&&&&&&&&&&&
*****************************************************************************/
#if !defined(AFX_MYDBWORK_H__D777F369_68E5_4FA3_DE7708__INCLUDED_)
#defineAFX_MYDBWORK_H__D777F369_68E5_4FA3_DE7708__INCLUDED_
#if _MSC_VER &1000
#pragma once
#endif // _MSC_VER& 1000
#pragmawarning(disable:4146)
#import &..\CommFile\Lib\msado15.dll&named_guids rename(&EOF&,&adoEOF&),rename(&BOF&,&adoBOF&)
#pragmawarning(default:4146)
using namespaceADODB;
#include&..\\CommFile\\CMyWriteLog.h&
//#include&CMyWriteLog.h&
#include&icrsint.h&
_COM_SMARTPTR_TYPEDEF(IADORecordBinding,__uuidof(IADORecordBinding));
#define MAX_BUFF260
classCMyDBWork
CMyDBWork();
virtual ~CMyDBWork();
&&&&&&&&&&&&
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
连接数据库
&&&&&&&&&&&&&
GetConnStr
(char *szConnStr, int nBuffSize);
获得连接数据库的字符串
SetConnStr
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
设置连接数据库的字符串
SetConnStr
(char *szConnStr);
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
设置连接数据库的字符串
(constchar *szSQL);
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
ExecuteSQL
(constchar *szSQLStr, long &nRefreshNum);
&&&&&&&&&&&&
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
关闭记录集、连接对象
void CloseRecord
bool BeginTrans();
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
启动一新事务,相当于建立回滚标志
bool CommitTrans();
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
BeginTrans
之后所有的修改
bool RollbackTrans();
&&&&&&&&&&&&&&&&&&&&&&&&&&
BeginTrans
之后所有的操作
bool RecordMoveLast();
bool RecordMoveFirst();
bool RecordMovePrevious();
bool RecordMoveNext();
bool IsRecordBOF();
bool IsRecordEOF();
CollectMsg
(const char *szColumnName, long
&&&&&&&&&&&&
CollectMsg
(const char *szColumnName, BYTE &btTemp
&&&&&&&&&&&&&&&&&&
CollectMsg
(const char *szColumnName, DWORD&dwTemp
CollectMsg
(const char *szColumnName, UINT&iTemp
&&&&&&&&&&&&
CollectMsg
(const char *szColumnName, int &iTemp
&&&&&&&&&&&&&&&&
CollectMsg
(const char *szColumnName, float&fTemp
&&&&&&&&&&&&
CollectMsg
(const char *szColumnName, double&dbTemp
CollectMsg
(const char *szColumnName, char&chTemp
&&&&&&&&&&
CollectMsg
(const char *szColumnName, char *szBuff,int nBuffSize);
CollectMsg
(ULONG nIndex, long
&&&&&&&&&&&&
CollectMsg
(ULONG nIndex, BYTE &btTemp
&&&&&&&&&&&&&&
CollectMsg
(ULONG nIndex, DWORD &dwTemp
CollectMsg
(ULONG nIndex, UINT &iTemp
&&&&&&&&&&&&&&&&&
CollectMsg
(ULONG nIndex, int &iTemp
&&&&&&&&&&&&
CollectMsg
(ULONG nIndex, float &fTemp
&&&&&&&&&&&&&&&&&&
CollectMsg
(ULONG nIndex, double &dbTemp
CollectMsg
(ULONG nIndex, char &chTemp
&&&&&&&&&&&&&&&
CollectMsg
(ULONG nIndex, char *szBuff, intnBuffSize);
//private:
CMyWriteLog m_WriteL
//private:
char m_szConnStr[MAX_BUFF];
//private:
_ConnectionPtr m_pC
_RecordsetPtr
_CommandPtr
_ParameterPtr
#endif //!defined(AFX_MYDBWORK_H__D777F369_68E5_4FA3_DE7708__INCLUDED_)
//////////////////////////////////////////////////////////////////////////
////////////////////
以下是以绑定记录集方式提取数据的
Demo//////////////////
//////////////////////////////////////////////////////////////////////////
// CMyDBWorkDbO
//if(DbObject.ConnDB())
CCarInfoObj CarO
if (DbObject.BindingRecord(&CarObj,&SELECT top(10)Car_mark, carid,
gsm_number, car_type FROMcar_info&)) {
&&&&&&&&&&&&
while (! DbObject.IsRecordEOF()) {
&&&&&&&&&&&&&&&&&&&&&
if (adFldOK ==CarObj.m_nStatusArray[0] && adFldOK ==
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
CarObj.m_nStatusArray[0]&& adFldOK== CarObj.m_nStatusArray[0]) {
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
CString szS
&&&&&&&&&&&&&&&&&&&&&&&&&&&
szShow.Format(&CarMark:%s,CarID:%d, GSM:%s&, CarObj.m_szCarMark,
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
CarObj.m_nCarID,CarObj.m_szGSM);
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
AfxMessageBox(szShow);
&&&&&&&&&&&&&&&&&&&&&
&&&&&&&&&&&&&&&&&&&&&
DbObject.RecordMoveNext();
&&&&&&&&&&&&
char szBuff[100]; memset(szBuff, 0, 100);
int nR = GetErrorStr(szBuff,GetLastError());
int i = 0;
//////////////////////////////////////////////////////////////////////////
/////////////////////////
以下是关于
///////////////////////////
//////////////////////////////////////////////////////////////////////////
// #include&..\COMMFILE\MyDBWork.h&
// #include&icrsint.h&
// classCCarInfoObj : public CADORecordBinding
BEGIN_ADO_BINDING(CCarInfoObj)
&&&&&&&&&&&&
ADO_VARIABLE_LENGTH_ENTRY2(1,adVarChar, m_szCarMark, sizeof(m_szCarMark)
,m_nStatusArray[0], false)
&&&&&&&&&&&&
ADO_VARIABLE_LENGTH_ENTRY2(2,adInteger, m_nCarID
, sizeof(m_nCarID)
&&&&&&&&&&&
, m_nStatusArray[1], false)
&&&&&&&&&&&&
ADO_VARIABLE_LENGTH_ENTRY2(3,adVarChar, m_szGSM
, sizeof(m_szGSM)
&&&&&&&&&&&
, m_nStatusArray[2], false)
END_ADO_BINDING()
&&&&&&&&&&&&
// public:
m_szCarMark[20];
ULONG m_nCarID;
m_szGSM[20];
ULONG m_nStatusArray[3];
// public:
CCarInfoObj();
virtual ~CCarInfoObj();
以下是部份代码
实现部份:
// MyDBWork.cpp:implementation of the CMyDBWork class.
//////////////////////////////////////////////////////////////////////
#include&stdafx.h&
#include&MyDBWork.h&
//#include&icrsint.h&
#ifdef _DEBUG
#undef THIS_FILE
static charTHIS_FILE[]=__FILE__;
#define newDEBUG_NEW
//////////////////////////////////////////////////////////////////////
//Construction/Destruction
//////////////////////////////////////////////////////////////////////
CMyDBWork::CMyDBWork()
m_pConn = NULL;
m_pRecord = NULL;
char szPath[MAX_BUFF]; memset(szPath,0, MAX_BUFF);
m_WriteLog.GetLogPath(szPath,MAX_BUFF);
if (strlen(szPath) & 0) {
&&&&&&&&&&&&&&&&&&
strcat(szPath,&DBError\\&);
&&&&&&&&&&&&&&&&&&
m_WriteLog.SetLogPath(szPath);
SetConnStr();
HRESULT hr = CoInitialize(NULL);
if (FAILED(hr)){
&&&&&&&&&&&&&&&&&&
m_WriteLog.WriteLog(&CoInitializefail\n&, strlen(&CoInitialize fail\n&), LOG_ERR);
CMyDBWork::~CMyDBWork()
CoUninitialize();
boolCMyDBWork::CollectMsg(const char *szColumnName, long
&&&&&&&&&&&&
bool bResult =
if (adStateClosed != m_pRecord-&State){
&&&&&&&&&&&&&&&&&&
&&&&&&&&&&&&&&&&&&&&&&&&&&&
_variant_tColumn(szColumnName);
&&&&&&&&&&&&&&&&&&&&&&&&&&&
_variant_t RusultGet= m_pRecord-&Fields-&GetItem(Column)-&V
&&&&&&&&&&&&&&&&&&&&&&&&&&&
lTemp =RusultGet.lV
&&&&&&&&&&&&&&&&&&&&&&&&&&&
&&&&&&&&&&&&&&&&&&
&&&&&&&&&&&&&&&&&&
catch(_com_error e){
&&&&&&&&&&&&&&&&&&&&&&&&&&&
charszLog[MAX_BUFF]; memset(szLog, 0, MAX_BUFF);
&&&&&&&&&&&&&&&&&&&&&&&&&&&
sprintf(szLog,&%s&, (char *)(e.Description()));
&&&&&&&&&&&&&&&&&&&&&&&&&&&
m_WriteLog.WriteLog(szLog,strlen(szLog), LOG_ERR);
&&&&&&&&&&&&&&&&&&
boolCMyDBWork::CollectMsg(const char *szColumnName, BYTE &btTemp
&&&&&&&&&&&&&&&&&&
bool bResult =
if (adStateClosed !=m_pRecord-&State) {
&&&&&&&&&&&&&&&&&&
&&&&&&&&&&&&&&&&&&&&&&&&&&&
_variant_tColumn(szColumnName);
&&&&&&&&&&&&&&&&&&&&&&&&&&&
_variant_t RusultGet= m_pRecord-&Fields-&GetItem(Column)-&V
&&&&&&&&&&&&&&&&&&&&&&&&&&&
btTemp =RusultGet.bV
&&&&&&&&&&&&&&&&&&&&&&&&&&&
&&&&&&&&&&&&&&&&&&
&&&&&&&&&&&&&&&&&&
catch(_com_error e){
&&&&&&&&&&&&&&&&&&&&&&&&&&&
charszLog[MAX_BUFF]; memset(szLog, 0, MAX_BUFF);
&&&&&&&&&&&&&&&&&&&&&&&&&&&
sprintf(szLog,&%s&, (char *)(e.Description()));
&&&&&&&&&&&&&&&&&&&&&&&&&&&
m_WriteLog.WriteLog(szLog,strlen(szLog), LOG_ERR);
&&&&&&&&&&&&&&&&&&
boolCMyDBWork::CollectMsg(const char *szColumnName, DWORD &dwTemp
bool bResult =
if (adStateClosed != m_pRecord-&State){
&&&&&&&&&&&&&&&&&&
&&&&&&&&&&&&&&&&&&&&&&&&&&&
_variant_tColumn(szColumnName);
&&&&&&&&&&&&&&&&&&&&&&&&&&&
_variant_t RusultGet= m_pRecord-&Fields-&GetItem(Column)-&V
&&&&&&&&&&&&&&&&&&&&&&&&&&&
dwTemp =RusultGet.ulV
&&&&&&&&&&&&&&&&&&&&&&&&&&&
&&&&&&&&&&&&&&&&&&
&&&&&&&&&&&&&&&&&&
catch(_com_error e){
&&&&&&&&&&&&&&&&&&&&&&&&&&&
charszLog[MAX_BUFF]; memset(szLog, 0, MAX_BUFF);
&&&&&&&&&&&&&&&&&&&&&&&&&&&
sprintf(szLog,&%s&, (char *)(e.Description()));
&&&&&&&&&&&&&&&&&&&&&&&&&&&
m_WriteLog.WriteLog(szLog,strlen(szLog), LOG_ERR);
&&&&&&&&&&&&&&&&&&
boolCMyDBWork::CollectMsg(const char *szColumnName, UINT &iTemp
&&&&&&&&&&&
bool bResult =
if (adStateClosed != m_pRecord-&State){
&&&&&&&&&&&&&&&&&&
&&&&&&&&&&&&&&&&&&&&&&&&&&&
_variant_tColumn(szColumnName);
&&&&&&&&&&&&&&&&&&&&&&&&&&&
_variant_t RusultGet= m_pRecord-&Fields-&GetItem(Column)-&V
&&&&&&&&&&&&&&&&&&&&&&&&&&&
iTemp =RusultGet.ulV
&&&&&&&&&&&&&&&&&&&&&&&&&&&
&&&&&&&&&&&&&&&&&&
&&&&&&&&&&&&&&&&&&
catch(_com_error e){
&&&&&&&&&&&&&&&&&&&&&&&&&&&
charszLog[MAX_BUFF]; memset(szLog, 0, MAX_BUFF);
&&&&&&&&&&&&&&&&&&&&&&&&&&&
sprintf(szLog,&%s&, (char *)(e.Description()));
&&&&&&&&&&&&&&&&&&&&&&&&&&&
m_WriteLog.WriteLog(szLog,strlen(szLog), LOG_ERR);
&&&&&&&&&&&&&&&&&&
boolCMyDBWork::CollectMsg(const char *szColumnName, int &iTemp
&&&&&&&&&&&&&&&&
bool bResult =
if (adStateClosed != m_pRecord-&State){
&&&&&&&&&&&&&&&&&&
&&&&&&&&&&&&&&&&&&&&&&&&&&&
_variant_tColumn(szColumnName);
&&&&&&&&&&&&&&&&&&&&&&&&&&&
_variant_t RusultGet= m_pRecord-&Fields-&GetItem(Column)-&V
&&&&&&&&&&&&&&&&&&&&&&&&&&&
iTemp =RusultGet.intV
&&&&&&&&&&&&&&&&&&&&&&&&&&&
&&&&&&&&&&&&&&&&&&
&&&&&&&&&&&&&&&&&&
catch(_com_error e){
&&&&&&&&&&&&&&&&&&&&&&&&&&&
charszLog[MAX_BUFF]; memset(szLog, 0, MAX_BUFF);
&&&&&&&&&&&&&&&&&&&&&&&&&&&
sprintf(szLog,&%s&, (char *)(e.Description()));
&&&&&&&&&&&&&&&&&&&&&&&&&&&
m_WriteLog.WriteLog(szLog,strlen(szLog), LOG_ERR);
&&&&&&&&&&&&&&&&&&
boolCMyDBWork::CollectMsg(const char *szColumnName, float &fTemp
&&&&&&&&&&&&
bool bResult =
if (adStateClosed != m_pRecord-&State){
&&&&&&&&&&&&&&&&&&
&&&&&&&&&&&&&&&&&&&&&&&&&&&
_variant_tColumn(szColumnName);
&&&&&&&&&&&&&&&&&&&&&&&&&&&
_variant_t RusultGet= m_pRecord-&Fields-&GetItem(Column)-&V
&&&&&&&&&&&&&&&&&&&&&&&&&&&
fTemp =RusultGet.fltV
&&&&&&&&&&&&&&&&&&&&&&&&&&&
&&&&&&&&&&&&&&&&&&
&&&&&&&&&&&&&&&&&&
catch(_com_error e){
&&&&&&&&&&&&&&&&&&&&&&&&&&&
charszLog[MAX_BUFF]; memset(szLog, 0, MAX_BUFF);
&&&&&&&&&&&&&&&&&&&&&&&&&&&
sprintf(szLog,&%s&, (char *)(e.Description()));
&&&&&&&&&&&&&&&&&&&&&&&&&&&
m_WriteLog.WriteLog(szLog,strlen(szLog), LOG_ERR);
&&&&&&&&&&&&&&&&&&
boolCMyDBWork::CollectMsg(const char *szColumnName, double &dbTemp
bool bResult =
if (adStateClosed != m_pRecord-&State){
&&&&&&&&&&&&&&&&&&
&&&&&&&&&&&&&&&&&&&&&&&&&&&
_variant_tColumn(szColumnName);
&&&&&&&&&&&&&&&&&&&&&&&&&&&
_variant_t RusultGet= m_pRecord-&Fields-&GetItem(Column)-&V
&&&&&&&&&&&&&&&&&&&&&&&&&&&
dbTemp =RusultGet.dblV
&&&&&&&&&&&&&&&&&&&&&&&&&&&
&&&&&&&&&&&&&&&&&&
&&&&&&&&&&&&&&&&&&
catch(_com_error e){
&&&&&&&&&&&&&&&&&&&&&&&&&&&
charszLog[MAX_BUFF]; memset(szLog, 0, MAX_BUFF);
&&&&&&&&&&&&&&&&&&&&&&&&&&&
sprintf(szLog,&%s&, (char *)(e.Description()));
&&&&&&&&&&&&&&&&&&&&&&&&&&&
m_WriteLog.WriteLog(szLog,strlen(szLog), LOG_ERR);
&&&&&&&&&&&&&&&&&&
boolCMyDBWork::CollectMsg(const char *szColumnName, char &chTemp){
bool bResult =
if (adStateClosed != m_pRecord-&State){
&&&&&&&&&&&&&&&&&&
&&&&&&&&&&&&&&&&&&&&&&&&&&&
_variant_tColumn(szColumnName);
&&&&&&&&&&&&&&&&&&&&&&&&&&&
_variant_t RusultGet= m_pRecord-&Fields-&GetItem(Column)-&V
&&&&&&&&&&&&&&&&&&&&&&&&&&&
chTemp =char(RusultGet.bstrVal[0]);
&&&&&&&&&&&&&&&&&&&&&&&&&&&
&&&&&&&&&&&&&&&&&&
&&&&&&&&&&&&&&&&&&
catch(_com_error e){
&&&&&&&&&&&&&&&&&&&&&&&&&&&
charszLog[MAX_BUFF]; memset(szLog, 0, MAX_BUFF);
&&&&&&&&&&&&&&&&&&&&&&&&&&&
sprintf(szLog,&%s\n&, (char *)(e.Description()));
&&&&&&&&&&&&&&&&&&&&&&&&&&&
m_WriteLog.WriteLog(szLog,strlen(szLog), LOG_ERR);
&&&&&&&&&&&&&&&&&&
boolCMyDBWork::CollectMsg(const char *szColumnName, char *szBuff, int nBuffSize)
bool bResult =
if (adStateClosed !=m_pRecord-&State) {
&&&&&&&&&&&&&&&&&&
&&&&&&&&&&&&&&&&&&&&&&&&&&&
_variant_tColumn(szColumnName);
&&&&&&&&&&&&&&&&&&&&&&&&&&&
_variant_t RusultGet= m_pRecord-&Fields-&GetItem(Column)-&V
&&&&&&&&&&&&&&&&&&&&&&&&&&&
WideCharToMultiByte(CP_ACP,0, RusultGet.bstrVal, -1, szBuff, nBuffSize,
NULL, NULL);
&&&&&&&&&&&&&&&&&&&&&&&&&&&
&&&&&&&&&&&&&&&&&&
&&&&&&&&&&&&&&&&&&
catch(_com_error e){
&&&&&&&&&&&&&&&&&&&&&&&&&&&
charszLog[MAX_BUFF]; memset(szLog, 0, MAX_BUFF);
&&&&&&&&&&&&&&&&&&&&&&&&&&&
sprintf(szLog,&%s&, (char *)(e.Description()));
&&&&&&&&&&&&&&&&&&&&&&&&&&&
m_WriteLog.WriteLog(szLog,strlen(szLog), LOG_ERR);
&&&&&&&&&&&&&&&&&&
boolCMyDBWork::CollectMsg(ULONG nIndex, long
&&&&&&&&&&&&
bool bResult =
if (adStateClosed !=m_pRecord-&State) {
&&&&&&&&&&&&&&&&&&
&&&&&&&&&&&&&&&&&&&&&&&&&&&
_variant_tColumn((long)nIndex);
&&&&&&&&&&&&&&&&&&&&&&&&&&&
_variant_t RusultGet= m_pRecord-&Fields-&GetItem(Column)-&V
&&&&&&&&&&&&&&&&&&&&&&&&&&&
lTemp =RusultGet.lV
&&&&&&&&&&&&&&&&&&&&&&&&&&&
&&&&&&&&&&&&&&&&&&
&&&&&&&&&&&&&&&&&&
catch(_com_error e){
&&&&&&&&&&&&&&&&&&&&&&&&&&&
charszLog[MAX_BUFF]; memset(szLog, 0, MAX_BUFF);
&&&&&&&&&&&&&&&&&&&&&&&&&&&
sprintf(szLog,&%s&, (char *)(e.Description()));
&&&&&&&&&&&&&&&&&&&&&&&&&&&
m_WriteLog.WriteLog(szLog,strlen(szLog), LOG_ERR);
&&&&&&&&&&&&&&&&&&
boolCMyDBWork::CollectMsg(ULONG nIndex, BYTE &btTemp
&&&&&&&&&&&&&&
bool bResult =
if (adStateClosed !=m_pRecord-&State) {
&&&&&&&&&&&&&&&&&&
&&&&&&&&&&&&&&&&&&&&&&&&&&&
_variant_tColumn((long)nIndex);
&&&&&&&&&&&&&&&&&&&&&&&&&&&
_variant_t RusultGet= m_pRecord-&Fields-&GetItem(Column)-&V
&&&&&&&&&&&&&&&&&&&&&&&&&&&
btTemp =RusultGet.bV
&&&&&&&&&&&&&&&&&&&&&&&&&&&
&&&&&&&&&&&&&&&&&&
&&&&&&&&&&&&&&&&&&
catch(_com_error e){
&&&&&&&&&&&&&&&&&&&&&&&&&&&
charszLog[MAX_BUFF]; memset(szLog, 0, MAX_BUFF);
&&&&&&&&&&&&&&&&&&&&&&&&&&&
sprintf(szLog,&%s&, (char *)(e.Description()));
&&&&&&&&&&&&&&&&&&&&&&&&&&&
m_WriteLog.WriteLog(szLog,strlen(szLog), LOG_ERR);
&&&&&&&&&&&&&&&&&&
boolCMyDBWork::CollectMsg(ULONG nIndex, DWORD &dwTemp
bool bResult =
if (adStateClosed !=m_pRecord-&State) {
&&&&&&&&&&&&&&&&&&
&&&&&&&&&&&&&&&&&&&&&&&&&&&
_variant_tColumn((long)nIndex);
&&&&&&&&&&&&&&&&&&&&&&&&&&&
_variant_t RusultGet= m_pRecord-&Fields-&GetItem(Column)-&V
&&&&&&&&&&&&&&&&&&&&&&&&&&&
dwTemp =RusultGet.ulV
&&&&&&&&&&&&&&&&&&&&&&&&&&&
&&&&&&&&&&&&&&&&&&
&&&&&&&&&&&&&&&&&&
catch(_com_error e){
&&&&&&&&&&&&&&&&&&&&&&&&&&&
charszLog[MAX_BUFF]; memset(szLog, 0, MAX_BUFF);
&&&&&&&&&&&&&&&&&&&&&&&&&&&
sprintf(szLog,&%s&, (char *)(e.Description()));
&&&&&&&&&&&&&&&&&&&&&&&&&&&
m_WriteLog.WriteLog(szLog,strlen(szLog), LOG_ERR);
&&&&&&&&&&&&&&&&&&
boolCMyDBWork::CollectMsg(ULONG nIndex, UINT &iTemp
&&&&&&&&&&&&&&&&&
bool bResult =
if (adStateClosed !=m_pRecord-&State) {
&&&&&&&&&&&&&&&&&&
&&&&&&&&&&&&&&&&&&&&&&&&&&&
_variant_tColumn((long)nIndex);
&&&&&&&&&&&&&&&&&&&&&&&&&&&
_variant_t RusultGet= m_pRecord-&Fields-&GetItem(Column)-&V
&&&&&&&&&&&&&&&&&&&&&&&&&&&
iTemp =RusultGet.ulV
&&&&&&&&&&&&&&&&&&&&&&&&&&&
&&&&&&&&&&&&&&&&&&
&&&&&&&&&&&&&&&&&&
catch(_com_error e){
&&&&&&&&&&&&&&&&&&&&&&&&&&&
charszLog[MAX_BUFF]; memset(szLog, 0, MAX_BUFF);
&&&&&&&&&&&&&&&&&&&&&&&&&&&
sprintf(szLog,&%s&, (char *)(e.Description()));
&&&&&&&&&&&&&&&&&&&&&&&&&&&
m_WriteLog.WriteLog(szLog,strlen(szLog), LOG_ERR);
&&&&&&&&&&&&&&&&&&
boolCMyDBWork::CollectMsg(ULONG nIndex, int &iTemp
&&&&&&&&&&&&
bool bResult =
if (adStateClosed !=m_pRecord-&State) {
&&&&&&&&&&&&&&&&&&
&&&&&&&&&&&&&&&&&&&&&&&&&&&
_variant_tColumn((long)nIndex);
&&&&&&&&&&&&&&&&&&&&&&&&&&&
_variant_t RusultGet= m_pRecord-&Fields-&GetItem(Column)-&V
&&&&&&&&&&&&&&&&&&&&&&&&&&&
iTemp =RusultGet.intV
&&&&&&&&&&&&&&&&&&&&&&&&&&&
&&&&&&&&&&&&&&&&&&
&&&&&&&&&&&&&&&&&&
catch(_com_error e){
&&&&&&&&&&&&&&&&&&&&&&&&&&&
char szLog[MAX_BUFF];memset(szLog, 0, MAX_BUFF);
&&&&&&&&&&&&&&&&&&&&&&&&&&&
sprintf(szLog,&%s&, (char *)(e.Description()));
&&&&&&&&&&&&&&&&&&&&&&&&&&&
m_WriteLog.WriteLog(szLog,strlen(szLog), LOG_ERR);
&&&&&&&&&&&&&&&&&&
boolCMyDBWork::CollectMsg(ULONG nIndex, float &fTemp
&&&&&&&&&&&&&&&&&
bool bResult =
if (adStateClosed !=m_pRecord-&State) {
&&&&&&&&&&&&&&&&&&
&&&&&&&&&&&&&&&&&&&&&&&&&&&
_variant_tColumn((long)nIndex);
&&&&&&&&&&&&&&&&&&&&&&&&&&&
_variant_t RusultGet= m_pRecord-&Fields-&GetItem(Column)-&V
&&&&&&&&&&&&&&&&&&&&&&&&&&&
fTemp =RusultGet.fltV
&&&&&&&&&&&&&&&&&&&&&&&&&&&
&&&&&&&&&&&&&&&&&&
&&&&&&&&&&&&&&&&&&
catch(_com_error e){
&&&&&&&&&&&&&&&&&&&&&&&&&&&
char szLog[MAX_BUFF];memset(szLog, 0, MAX_BUFF);
&&&&&&&&&&&&&&&&&&&&&&&&&&&
sprintf(szLog,&%s\n&, (char *)(e.Description()));
&&&&&&&&&&&&&&&&&&&&&&&&&&&
m_WriteLog.WriteLog(szLog,strlen(szLog), LOG_ERR);
&&&&&&&&&&&&&&&&&&
boolCMyDBWork::CollectMsg(ULONG nIndex, double &dbTemp
bool bResult =
if (adStateClosed !=m_pRecord-&State) {
&&&&&&&&&&&&&&&&&&
&&&&&&&&&&&&&&&&&&&&&&&&&&&
_variant_tColumn((long)nIndex);
&&&&&&&&&&&&&&&&&&&&&&&&&&&
_variant_t RusultGet= m_pRecord-&Fields-&GetItem(Column)-&V
&&&&&&&&&&&&&&&&&&&&&&&&&&&
dbTemp =RusultGet.dblV
&&&&&&&&&&&&&&&&&&&&&&&&&&&
&&&&&&&&&&&&&&&&&&
&&&&&&&&&&&&&&&&&&
catch(_com_error e){
&&&&&&&&&&&&&&&&&&&&&&&&&&&
char szLog[MAX_BUFF];memset(szLog, 0, MAX_BUFF);
&&&&&&&&&&&&&&&&&&&&&&&&&&&
sprintf(szLog,&%s\n&, (char *)(e.Description()));
&&&&&&&&&&&&&&&&&&&&&&&&&&&
m_WriteLog.WriteLog(szLog,strlen(szLog), LOG_ERR);
&&&&&&&&&&&&&&&&&&
// boolCMyDBWork::CollectMsg(ULONG nIndex, char &chTemp){
bool bResult =
if (adStateClosed != m_pRecord-&State) {
&&&&&&&&&&&&
&&&&&&&&&&&&&&&&&&&&&
_variant_tColumn((long)nIndex);
&&&&&&&&&&&&&&&&&&&&&
_variant_t RusultGet =m_pRecord-&Fields-&GetItem(Column)-&V
&&&&&&&&&&&&&&&&&&&&&
chTemp =char(RusultGet.cVal);
&&&&&&&&&&&&&&&&&&&&&
&&&&&&&&&&&&
&&&&&&&&&&&&
catch(_com_error e){
&&&&&&&&&&&&&&&&&&&&&
char szLog[MAX_BUFF];memset(szLog, 0, MAX_BUFF);
&&&&&&&&&&&&&&&&&&&&&
sprintf(szLog,&%s\n&, CW2A(e.Description()));
&&&&&&&&&&&&&&&&&&&&&
m_WriteLog.WriteLog(szLog,strlen(szLog), LOG_ERR);
&&&&&&&&&&&&
boolCMyDBWork::CollectMsg(ULONG nIndex, char *szBuff, int nBuffSize)
bool bResult =
if (adStateClosed !=m_pRecord-&State) {
&&&&&&&&&&&&&&&&&&
&&&&&&&&&&&&&&&&&&&&&&&&&&&
_variant_tColumn((long)nIndex);
&&&&&&&&&&&&&&&&&&&&&&&&&&&
_variant_t RusultGet= m_pRecord-&Fields-&GetItem(Column)-&V
&&&&&&&&&&&&&&&&&&&&&&&&&&&
WideCharToMultiByte(CP_ACP,0, RusultGet.bstrVal, -1, szBuff, nBuffSize,
NULL, NULL);
&&&&&&&&&&&&&&&&&&&&&&&&&&&
&&&&&&&&&&&&&&&&&&
&&&&&&&&&&&&&&&&&&
catch(_com_error e){
&&&&&&&&&&&&&&&&&&&&&&&&&&&
charszLog[MAX_BUFF]; memset(szLog, 0, MAX_BUFF);
&&&&&&&&&&&&&&&&&&&&&&&&&&&
sprintf(szLog,&%s\n&, (char *)(e.Description()));
&&&&&&&&&&&&&&&&&&&&&&&&&&&
m_WriteLog.WriteLog(szLog,strlen(szLog), LOG_ERR);
&&&&&&&&&&&&&&&&&&
boolCMyDBWork::ConnDB(void){
bool bResult =
if (NULL == m_pConn || adStateClosed ==m_pConn-&State) {
&&&&&&&&&&&&&&&&&&
if (strlen(m_szConnStr) &0) {
&&&&&&&&&&&&&&&&&&&&&
HRESULT hr =CoInitialize(NULL);
&&&&&&&&&&&&&&&&&&&&&
if (FAILED(hr))
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
m_WriteLog.WriteLog(&CoInitializefail\n&, strlen(&CoInitialize fail\n&), LOG_ERR);
&&&&&&&&&&&&&&&&&&&&&
&&&&&&&&&&&&&&&&&&&&&&&&
&&&&&&&&&&&&&&&&&&&&&&&&&&&
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
//Connecting
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
if( ! FAILED(m_pConn.CreateInstance(_uuidof(Connection)))){
设置连接超时时间
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
m_pConn-&CommandTimeout= 30;
&&&&&&&&&&&&&&&&&
//in seconds
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
if(! FAILED(m_pConn-&Open((_bstr_t)(m_szConnStr), &&, &&,
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
adModeUnknown)))
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
catch(_com_errore){
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
charszLog[MAX_BUFF]; memset(szLog, 0, MAX_BUFF);
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
sprintf(szLog,&
连接数据库错误
:%s\n&, (char *)(e.Description()));
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
m_WriteLog.WriteLog(szLog,strlen(szLog), LOG_ERR);
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
&&&&&&&&&&&&&&&&&&
&&&&&&&&&&&&&&&&&&
boolCMyDBWork::SelectSQL(const char *szSQL){
bool bResult =
if (strlen(szSQL) & 0 &&strlen(m_szConnStr) & 0) {
&&&&&&&&&&&&&&&&&&
if (NULL != m_pRecord/* ||adStateClosed != m_pRecord-&State*/)
&&&&&&&&&&&&&&&&&&&&&&&&&&&
m_pRecord-&Close();
&&&&&&&&&&&&&&&&&&
&&&&&&&&&&&&&&&&&&
&&&&&&&&&&&&&&&&&&
&&&&&&&&&&&&&&&&&&&&&&&&&&&
if(!FAILED(m_pRecord.CreateInstance(__uuidof(Recordset)))) {
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
HRESULT hr= 0;
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
if (NULL ==m_pConn || adStateClosed == m_pConn-&State)
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
hr= m_pRecord-&Open((_bstr_t)szSQL, _variant_t(m_szConnStr),
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
adOpenKeyset,adLockOptimistic, adCmdText);
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
hr= m_pRecord-&Open((_bstr_t)szSQL, m_pConn.GetInterfacePtr(),
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
adOpenKeyset,adLockOptimistic, adCmdText);
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
if(SUCCEEDED(hr))
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
&&&&&&&&&&&&&&&&&&&&&&&&&&&
&&&&&&&&&&&&&&&&&&
&&&&&&&&&&&&&&&&&&
catch (_com_error e)
&&&&&&&&&&&&&&&&&&
&&&&&&&&&&&&&&&&&&&&&&&&&&&
charszLog[MAX_BUFF]; memset(szLog, 0, MAX_BUFF);
&&&&&&&&&&&&&&&&&&&&&&&&&&&
sprintf(szLog,&
查询命令错误
:%s[%s]&, (char*)(e.Description()), szSQL);
&&&&&&&&&&&&&&&&&&&&&&&&&&&
m_WriteLog.WriteLog(szLog,strlen(szLog), LOG_ERR);
&&&&&&&&&&&&&&&&&&
//nRefreshNum
受影响的记录数
boolCMyDBWork::ExecuteSQL(const char *szSQLStr, long &nRefreshNum){
bool bResult =
if (strlen(szSQLStr) & 0) {
&&&&&&&&&&&&&&&&&&
if (NULL == m_pConn ||adStateClosed == m_pConn-&State)
&&&&&&&&&&&&&&&&&&&&&&&&&&&
&&&&&&&&&&&&&&&&&&
&&&&&&&&&&&&&&&&&&
&&&&&&&&&&&&&&&&&&&&&&&&&&&
_variant_t RefreshN
&&&&&&&&&&&&&&&&&&&&&&&&&&&
m_pConn-&Execute(_bstr_t(szSQLStr),&RefreshNum, adCmdText);
&&&&&&&&&&&&&&&&&&&&&&&&&&&
&&&&&&&&&&&&&&&&&&&&&&&&&&&
nRefreshNum =RefreshNum.lV
&&&&&&&&&&&&&&&&&&
&&&&&&&&&&&&&&&&&&
catch (_com_error e)
&&&&&&&&&&&&&&&&&&
&&&&&&&&&&&&&&&&&&&&&&&&&&&
nRefreshNum = 0;
&&&&&&&&&&&&&&&&&&&&&&&&&&&
charszLog[MAX_BUFF]; memset(szLog, 0, MAX_BUFF);
&&&&&&&&&&&&&&&&&&&&&&&&&&&
sprintf(szLog,&
:%s[%s]&, (char *)(e.Description()), szSQLStr);
&&&&&&&&&&&&&&&&&&&&&&&&&&&
m_WriteLog.WriteLog(szLog,strlen(szLog), LOG_ERR);
&&&&&&&&&&&&&&&&&&
intCMyDBWork::GetConnStr(char *szConnStr, int nBuffSize){
int nResult = 0;
if (NULL != szConnStr &&nBuffSize & 1 && strlen(m_szConnStr) & 0){
&&&&&&&&&&&&&&&&&&
if (strlen(m_szConnStr) &=(unsigned int)nBuffSize)
&&&&&&&&&&&&&&&&&&&&&&&&&&&
strcpy(szConnStr,m_szConnStr);
&&&&&&&&&&&&&&&&&&&&&&&&&&&
nResult =strlen(m_szConnStr);
&&&&&&&&&&&&&&&&&&
boolCMyDBWork::SetConnStr
&&&&&&&&&&&&&&&&&&&&&&&&&
设置连接数据库的字符串
bool bResult =
&&&&&&&&&&&&&&&&&&
GetPrivateProfileStringA(&DATA_BASE&,
&ConnectStr&, &&,m_szConnStr,
MAX_BUFF, &.\\Config.ini&);
&&&&&&&&&&&&&&&&&&
if (strlen(m_szConnStr) &1) {
&&&&&&&&&&&&&&&&&&&&&&&&&&&
char szUdlPath[] ={&.\\Test.udl&};
&&&&&&&&&&&&&&&&&&&&&&&&&&&
WIN32_FIND_DATAAfindD
&&&&&&&&&&&&&&&&&&&&&&&&&&&
if(INVALID_HANDLE_VALUE == FindFirstFileA(szUdlPath, &findData)){
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
FILE *hFile= fopen(szUdlPath, &a&);
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
if (NULL !=hFile) {
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
fclose(hFile);
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
&&&&&&&&&&&&&&&&&&&&&&&&&&&
&&&&&&&&&&&&&&&&&&&&&&&&&&&
sprintf(m_szConnStr,&File Name=%s&, szUdlPath);
&&&&&&&&&&&&&&&&&&
catch(...){
&&&&&&&&&&&&&&&&&&
bool CMyDBWork::SetConnStr
(char *szConnStr){
bool bResult =
if (NULL != szConnStr &&strlen(szConnStr) & 0) {
&&&&&&&&&&&&&&&&&&
strcpy(m_szConnStr,szConnStr);
&&&&&&&&&&&&&&&&&&
voidCMyDBWork::CloseDB(void){
CloseRecord();
&&&&&&&&&&&&&&&&&&
if (NULL != m_pConn)
&&&&&&&&&&&&&&&&&&&&&&&&&&&
m_pConn-&Close();
catch(_com_error e){
&&&&&&&&&&&&&&&&&&
char szLog[MAX_BUFF];memset(szLog, 0, MAX_BUFF);
&&&&&&&&&&&&&&&&&&
sprintf(szLog, &
关闭数据库连接错误
:%s\n&,(char *)(e.Description()));
&&&&&&&&&&&&&&&&&&
m_WriteLog.WriteLog(szLog,strlen(szLog), LOG_ERR);
void CMyDBWork::CloseRecord
&&&&&&&&&&&&&&&&&&
if (NULL != m_pRecord){
&&&&&&&&&&&&&&&&&&&&&&&&&&&
m_pRecord-&Close();
&&&&&&&&&&&&&&&&&&&&&&&&&&&
m_pRecord = NULL;
&&&&&&&&&&&&&&&&&&
catch(_com_error e){
&&&&&&&&&&&&&&&&&&
char szLog[MAX_BUFF];memset(szLog, 0, MAX_BUFF);
&&&&&&&&&&&&&&&&&&
sprintf(szLog, &
关闭数据记录集错误
:%s\n&,(char *)(e.Description()));
&&&&&&&&&&&&&&&&&&
m_WriteLog.WriteLog(szLog,strlen(szLog), LOG_ERR);
boolCMyDBWork::BindingRecord(CADORecordBinding *RsObject, char *szSQLStr)
bool bResult =
CloseRecord();
if (SelectSQL(szSQLStr)) {
&&&&&&&&&&&&&&&&&&
&&&&&&&&&&&&&&&&&&&&&&&&&&&
IADORecordBindingPtrpicRs(m_pRecord);
&&&&&&&&&&&&&&&&&&
if (! FAILED(picRs-&BindToRecordset(RsObject)))
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
&&&&&&&&&&&&&&&&&&
&&&&&&&&&&&&&&&&&&
catch(_com_error e){
&&&&&&&&&&&&&&&&&&&&&&&&&&&
charszLog[MAX_BUFF]; memset(szLog, 0, MAX_BUFF);
&&&&&&&&&&&&&&&&&&&&&&&&&&&
sprintf(szLog,&
绑定记录集错误
:%s\n&, (char *)(e.Description()));
&&&&&&&&&&&&&&&&&&&&&&&&&&&
m_WriteLog.WriteLog(szLog,strlen(szLog), LOG_ERR);
&&&&&&&&&&&&&&&&&&
boolCMyDBWork::IsRecordEOF()
bool bResult =
if (NULL != m_pRecord) {
&&&&&&&&&&&&&&&&&&
if (!m_pRecord-&adoEOF)
&&&&&&&&&&&&&&&&&&&&&&&&&&&
boolCMyDBWork::IsRecordBOF()
bool bResult =
if (NULL != m_pRecord) {
&&&&&&&&&&&&&&&&&&
if (!m_pRecord-&adoBOF)
&&&&&&&&&&&&&&&&&&&&&&&&&&&
boolCMyDBWork::RecordMoveNext()
bool bResult =
if (NULL != m_pRecord) {
&&&&&&&&&&&&&&&&&&
if (!m_pRecord-&adoEOF) {
&&&&&&&&&&&&&&&&&&&&&&&&&&&
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
m_pRecord-&MoveNext();
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
&&&&&&&&&&&&&&&&&&&&&&&&&&&
&&&&&&&&&&&&&&&&&&
catch(_com_errore){
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
charszLog[MAX_BUFF]; memset(szLog, 0, MAX_BUFF);
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
sprintf(szLog,&RecordMoveNext
:%s\n&, (char *)(e.Description()));
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
m_WriteLog.WriteLog(szLog,strlen(szLog), LOG_ERR);
&&&&&&&&&&&&&&&&&&&&&&&&&&&
&&&&&&&&&&&&&&&&&&
boolCMyDBWork::RecordMovePrevious()
bool bResult =
if (NULL != m_pRecord) {
&&&&&&&&&&&&&&&&&&
if (!m_pRecord-&adoBOF) {
&&&&&&&&&&&&&&&&&&&&&&&&&&&
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
m_pRecord-&MovePrevious();
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
&&&&&&&&&&&&&&&&&&&&&&&&&&&
&&&&&&&&&&&&&&&&&&&&&&&&&&&
catch(_com_error e){
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
charszLog[MAX_BUFF]; memset(szLog, 0, MAX_BUFF);
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
sprintf(szLog,&RecordMovePrevious
:%s\n&, (char *)(e.Description()));
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
m_WriteLog.WriteLog(szLog,strlen(szLog), LOG_ERR);
&&&&&&&&&&&&&&&&&&&&&&&&&&&
&&&&&&&&&&&&&&&&&&
boolCMyDBWork::RecordMoveFirst()
bool bResult =
if (NULL != m_pRecord) {
&&&&&&&&&&&&&&&&&&
&&&&&&&&&&&&&&&&&&&&&&&&&&&
m_pRecord-&MoveFirst();
&&&&&&&&&&&&&&&&&&&&&&&&&&&
&&&&&&&&&&&&&&&&&&
&&&&&&&&&&&&&&&&&&
catch(_com_error e){
&&&&&&&&&&&&&&&&&&&&&&&&&&&
charszLog[MAX_BUFF]; memset(szLog, 0, MAX_BUFF);
&&&&&&&&&&&&&&&&&&&&&&&&&&&
sprintf(szLog,&RecordMoveFirst
:%s\n&, (char *)(e.Description()));
&&&&&&&&&&&&&&&&&&&&&&&&&&&
m_WriteLog.WriteLog(szLog,strlen(szLog), LOG_ERR);
&&&&&&&&&&&&&&&&&&
boolCMyDBWork::RecordMoveLast()
bool bResult =
if (NULL != m_pRecord) {
&&&&&&&&&&&&&&&&&&
&&&&&&&&&&&&&&&&&&&&&&&&&&&
m_pRecord-&MoveLast();
&&&&&&&&&&&&&&&&&&&&&&&&&&&
&&&&&&&&&&&&&&&&&&
&&&&&&&&&&&&&&&&&&
catch(_com_error e){
&&&&&&&&&&&&&&&&&&&&&&&&&&&
charszLog[MAX_BUFF]; memset(szLog, 0, MAX_BUFF);
&&&&&&&&&&&&&&&&&&&&&&&&&&&
sprintf(szLog, &RecordMoveLast
:%s\n&,(char *)(e.Description()));
&&&&&&&&&&&&&&&&&&&&&&&&&&&
m_WriteLog.WriteLog(szLog,strlen(szLog), LOG_ERR);
&&&&&&&&&&&&&&&&&&
boolCMyDBWork::BeginTrans()
bool bResult =
if (NULL != m_pConn) {
&&&&&&&&&&&&&&&&&&
&&&&&&&&&&&&&&&&&&&&&&&&&&&
m_pConn-&BeginTrans();
&&&&&&&&&&&&&&&&&&&&&&&&&&&
&&&&&&&&&&&&&&&&&&
&&&&&&&&&&&&&&&&&&
catch(_com_error e){
&&&&&&&&&&&&&&&&&&&&&&&&&&&
charszLog[MAX_BUFF]; memset(szLog, 0, MAX_BUFF);
&&&&&&&&&&&&&&&&&&&&&&&&&&&
sprintf(szLog,&BeginTrans
:%s\n&, (char *)(e.Description()));
&&&&&&&&&&&&&&&&&&&&&&&&&&&
m_WriteLog.WriteLog(szLog,strlen(szLog), LOG_ERR);
&&&&&&&&&&&&&&&&&&
bool CMyDBWork::CommitTrans()
bool bResult =
if (NULL != m_pConn) {
&&&&&&&&&&&&&&&&&&
&&&&&&&&&&&&&&&&&&&&&&&&&&&
m_pConn-&CommitTrans();
&&&&&&&&&&&&&&&&&&&&&&&&&&&
&&&&&&&&&&&&&&&&&&
&&&&&&&&&&&&&&&&&&
catch(_com_error e){
&&&&&&&&&&&&&&&&&&&&&&&&&&&
charszLog[MAX_BUFF]; memset(szLog, 0, MAX_BUFF);
&&&&&&&&&&&&&&&&&&&&&&&&&&&
sprintf(szLog,&CommitTrans
:%s\n&, (char *)(e.Description()));
&&&&&&&&&&&&&&&&&&&&&&&&&&&
m_WriteLog.WriteLog(szLog,strlen(szLog), LOG_ERR);
&&&&&&&&&&&&&&&&&&
boolCMyDBWork::RollbackTrans()
bool bResult =
if (NULL != m_pConn) {
&&&&&&&&&&&&&&&&&&
&&&&&&&&&&&&&&&&&&&&&&&&&&&
m_pConn-&RollbackTrans();
&&&&&&&&&&&&&&&&&&&&&&&&&&&
&&&&&&&&&&&&&&&&&&
&&&&&&&&&&&&&&&&&&
catch(_com_error e){
&&&&&&&&&&&&&&&&&&&&&&&&&&&
charszLog[MAX_BUFF]; memset(szLog, 0, MAX_BUFF);
&&&&&&&&&&&&&&&&&&&&&&&&&&&
sprintf(szLog,&RollbackTranst
:%s\n&, (char *)(e.Description()));
&&&&&&&&&&&&&&&&&&&&&&&&&&&
m_WriteLog.WriteLog(szLog,strlen(szLog), LOG_ERR);
&&&&&&&&&&&&&&&&&&
while(!IsRecordEOF()){
UINT nCarID = 0;
char sCarMark[MAX_BUFF];memset(sCarMark, 0, MAX_BUFF);
CollectMsg(&CARID&
&&&&&&&&&&&&&&&&&&&&&&&&&&
&&&&&&&&&&&&&&&&
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
CollectMsg(&Car_Mark&
&&&&&&&&&&
&&&&&&&&&&&&&&&&
&&&&&&&&&&&&&&&&&
v_CarInfo.push_back(CI);
RecordMoveNext();
CloseDB();
已发表评论数()
请填写推刊名
描述不能大于100个字符!
权限设置: 公开
仅自己可见
正文不准确
标题不准确
排版有问题
主题不准确
没有分页内容
图片无法显示
视频无法显示
与原文不一致

我要回帖

更多关于 fx3u 4ad编程方法 的文章

 

随机推荐