VC++中的ADO宏

本文介绍了VC++中使用ADO进行数据库编程的方法。因函数调用参数设置繁琐,作者将ADO对象常见用法封装为宏,如xOpenRecordset、xConnect等。只需在stdafx.h中加入相关文件,就能减少编程工作量,并给出了db.h文件的具体代码。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

VC++中的ADO宏
在VC++中一般使用ADO(Active Database Object) 进行数据库编程,由于函数调用中需要设置很多参数,不如VB中使用简单。实际编程中大部分参数实际都设置为一样的,处理方法也一样。笔者就将ADO对象(Connection、Recordset、Command)等的常见用法封装为宏(xOpenRecordset、xConnect、xDisconnect、xExecute、xCmdExecute)。只需在stdafx.h中加入如下文件,就可以大大减少编程工作量。

 

//文件名:db.h

//ADO数据库宏

//日期:08-10-2003

 

#if !defined(_DB_H)

#define _DB_H

#include "icrsint.h"

//根据实际路径修改

#import "C:/Program Files/Common Files/System/ado/msado15.dll" no_namespace rename("EOF","EndOfFile")

//数据库连接参数结构

struct Database

{

CString strUserName;  //User's ID

CString strPassword;  //User's password

CString strServer;    //Name of database server

CString strDBName;    //Name of database

};

typedef Database *pDatabase;

 

//打开记录集

#define xOpenRecordset(/*_RecordsetPtr*/ rs, /*_ConnectionPtr*/ cn,/*_bstr_t*/ bt) /

HRESULT hr_rs=S_OK;/

hr_rs=rs.CreateInstance(__uuidof(Recordset));/

ASSERT(SUCCEEDED(hr_rs));/

hr_rs=rs->Open(bt,cn.GetInterfacePtr(),adOpenDynamic,adLockOptimistic,adCmdText);/

ASSERT(SUCCEEDED(hr_rs));

 

//执行SQL语句

#define xExecute(/*_ConnectionPtr*/ cn,/*_bstr_t*/ bt)   /

cn->Execute(bt,NULL,adExecuteNoRecords);

 

//连接数据库

//如果为非SQL Server数据库,请自行修改连接字符串

#define xConnect(/*_ConnectionPtr*/ cn, /*Database*/ database) /

_bstr_t bt_cn;/

HRESULT hr_cn=S_OK;/

bt_cn=(_bstr_t)"Provider=SQLOLEDB.1;Persist Security Info=False;User ID="+(_bstr_t)database.strUserName+(_bstr_t)";Password="+(_bstr_t)database.strPassword+(_bstr_t)";Initial Catalog="+(_bstr_t)database.strDBName+(_bstr_t)";Data Source="+(_bstr_t)database.strServer;/

CoInitialize(NULL); /

hr_cn=cn.CreateInstance(__uuidof(Connection));/

ASSERT(SUCCEEDED(hr_cn));/

hr_cn=cn->Open (bt_cn,_bstr_t(""),_bstr_t(""),adModeUnknown);/

ASSERT(SUCCEEDED(hr_cn));

 

//断开数据库

#define xDisconnect(/*_ConnectionPtr*/ cn) /

cn->Close ();/

CoUninitialize();

 

//执行Command命令

#define xCmdExecute(/*_CommandPtr*/ cmd,/*_RecordsetPtr*/ rs,/*_ConnectionPtr*/ cn,/*_bstr_t*/ bt) /

HRESULT hr_cmd=S_OK;/

hr_cmd=cmd.CreateInstance(__uuidof(Command));/

ASSERT(SUCCEEDED(hr_cmd));/

hr_cmd=rs.CreateInstance(__uuidof(Recordset));/

ASSERT(SUCCEEDED(hr_cmd));/

cmd->CommandText =bt;/

cmd->CommandType = adCmdText;/

cmd->ActiveConnection =cn;/

rs=cmd->Execute (NULL,NULL,adCmdText );

 

//end of file

#endif

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值