一、ADO 对象
对象
|
说明
|
Command
|
Command 对象定义了将对数据源执行的指定命令。
|
Connection
|
代表打开的、与数据源的连接。
|
DataControl (RDS)
|
将数据查询 Recordset 绑定到一个或多个控件上(例如,文本框、网格控件或组合框),以便在 Web 页上显示 ADOR.Recordset 数据。
|
datafactory (RDS Server)
|
实现对客户端应用程序的指定数据源进行读/写数据访问的方法。
|
DataSpace (RDS)
| |
Error
|
包含与单个操作(涉及提供者)有关的数据访问错误的详细信息。
|
Field
|
代表使用普通数据类型的数据的列。
|
Parameter
|
代表与基于参数化查询或存储过程的 Command 对象相关联的参数或自变量。
|
Property
|
代表由提供者定义的 ADO 对象的动态特性。
|
RecordSet
|
代表来自基本表或命令执行结果的记录的全集。任何时候,Recordset 对象所指的当前记录均为集合内的单个记录。
|
二、ADO 事件
事件
|
事件描述
|
事件数据
|
ConnectionClose
|
指示 ADO 要与 OLE DB 数据源断开连接。
|
无。
|
ConnectionOpen
|
指示 ADO 正在连接到 OLE DB 数据源。
|
如果客户端提供,则为连接到数据源所用的连接字符串。
|
Find
|
指示 ADO 客户端已调用 ADORecordset.Find 函数。
|
“查找”操作的判据;根据该判据匹配记录。
|
指示 ADO 客户端已调用 ADORecordset.GetRows 函数。
|
提取的行数。
| |
QueryResult
|
指示数据库已返回响应查询的结果集。
|
无。
|
QuerySend
|
指示 ADO 正在执行命令。该事件可由下列函数触发:
Connection.Execute Command.Execute Connection.<存储过程名> Recordset.Open |
构成查询的 SQL 语句。
|
RecordsetOpen
|
指示 ADO 正在打开远程服务器上的记录集。仅适用于三层方案。
|
打开记录集的源(通常为行返回的命令文本)。
|
Sort
|
指示 ADO 准备筛选或对数据排序。
|
排序或筛选应用于记录集数据的判据。
|
Transaction Rollback
|
指示 ADO 要中止当前本地事务。
|
返回真或假。如果为真,则保持中止,即该事务中止后紧跟着开始另一事务。如果为假,则不保持中止。
|
TransactionCommit
|
指示 ADO 正在提交 OLE DB 提供程序上的本地事务。
|
返回真或假。如果为真,则保留提交,即该事务提交后紧跟着开始另一事务。如果为假,则不保留提交。
|
TransactionStart
|
指示 ADO 正在开始 OLE DB 提供程序上的本地事务。
|
ADO 开始事务所基于的隔离级别。隔离级别指示可看到其他事务所做更改的哪一级别。
|
UpdateBatch
|
指示 ADO 正在向提供程序发送更新批处理。仅适用于三层方案。
|
如果有,为 ADO 将更新发送到的远程服务器名。
|
三、ADO 对象编程模型
连接数据源 (Connection),可选择开始事务。
可选择创建表示 SQL 命令的对象 (Command)。
可选择指定列、表以及 SQL 命令中的值作为变量参数 (Parameter)。
执行命令(Command、Connection 或 Recordset)。
如果命令以行返回,将行存储在存储对象中 (Recordset)。
可选择创建存储对象的视图以便进行排序、筛选和定位数据 (Recordset)。
编辑数据。可以添加、删除或更改行、列 (Recordset)。
在适当情况下,可以使用存储对象中的变更对数据源进行更新 (Recordset)。
在使用事务之后,可以接受或拒绝在事务中所做的更改。结束事务 (Connection)。
ADOConn.h///
#pragma once
#import "C:\Program Files\Common Files\System\ado\msado15.dll" no_namespace\
rename("EOF", "adoEOF")rename("BOF" , "adoBOF")
#include<string>
class ADOConn
{
public:
ADOConn(void);
virtual ~ADOConn(void);
//添加一个指向Connection对象的指针
_ConnectionPtr m_pConnection;
//添加一个指向Recordset对象的指针
_RecordsetPtr m_pRecordset;
//初始化--连接数据库
BOOL OnInitADOConn();
//执行查询
BOOL GetRecordSet(_bstr_t bstrSQL);
//执行SQL语句
BOOL ExecuteSQL(_bstr_t bstrSQL);
//断开数据库连接
void ExitConnect();
private:
CString ip;
CString username;
CString db_name;
CString userpwd;
public:
// 删除一条记录
bool DeleteRecord(_bstr_t bstrSQL);
// 增加一条记录
bool AddRecord(_bstr_t bstrSQL);
// 更新一条记录
bool UpdateRecord(_bstr_t bstrSQL);
};
/ADOConn.cpp//
#include "StdAfx.h"
#include "ADOConn.h"
#include<iostream>
using namespace std;
#ifdef _DEBUG
#undef THIS_FILE
static char THIS_FILE[]=__FILE__;
#define new DEBUG_NEW
#endif
ADOConn::ADOConn(void)
{
m_pConnection = NULL;
m_pRecordset = NULL;
char path[MAX_PATH];
GetModuleFileName(NULL, path, MAX_PATH);
CString strPath = path;
strPath = strPath.Left(strPath.ReverseFind('\\'));
strPath += "\\Config.ini";
cout<<strPath;
GetPrivateProfileString("DB Config","IP","127.0.0.1 ",ip.GetBuffer(MAX_PATH),MAX_PATH,strPath);
GetPrivateProfileString("DB Config","User Name","sa",username.GetBuffer(MAX_PATH),MAX_PATH,strPath);
GetPrivateProfileString("DB Config","User PassWord","111111",userpwd.GetBuffer(MAX_PATH),MAX_PATH,strPath);
GetPrivateProfileString("DB Config","DB Name","数据库名称",db_name.GetBuffer(MAX_PATH),MAX_PATH,strPath);
}
ADOConn::~ADOConn(void)
{
}
BOOL ADOConn::OnInitADOConn()
{
//初始化OLE/
//COM库环境
::CoInitialize(NULL);
//创建connection对象
try
{
m_pConnection.CreateInstance("ADODB.Connection");
//设置连接字符串
CString strConn;
strConn.Format("Provider=SQLOLEDB.1;server=%s;Network Library=DBMSSOCN;Initial Catalog=%s; uid=%s;pwd=%s",ip,db_name,username,userpwd);
//cout<<strConn;
m_pConnection->Open((_bstr_t)strConn,"","",adModeUnknown);
return TRUE;
}
//捕捉异常
catch( _com_error &e )
{
//显示错误信息
AfxMessageBox(e.Description());
return FALSE;
}
}
BOOL ADOConn::GetRecordSet(_bstr_t bstrSQL)
{
try
{
//连接数据库,如果connection对象为空,则重新连接数据库
if(m_pConnection==NULL)
if (!OnInitADOConn())
{
return FALSE;
}
//创建记录集对象
m_pRecordset.CreateInstance(__uuidof(Recordset));
//取得表中的记录
m_pRecordset->Open(bstrSQL,m_pConnection.GetInterfacePtr(),adOpenStatic,adLockOptimistic,adCmdText);
return TRUE;
}
catch( _com_error &e )
{
AfxMessageBox(e.Description());
return FALSE;
}
//返回记录集
// return m_pRecordset;
}
BOOL ADOConn::ExecuteSQL(_bstr_t bstrSQL)
{
_variant_t RecordsAffected;
try
{
//是否已连接数据库
if(m_pConnection==NULL)
if (!OnInitADOConn())
{
return FALSE;
}
//connection对象的Execute方法(_bstr_t CommandText,
//VARIANT * RecordsAffected,long Options)
//其中CommandText是命令字符串,通常是SQL命令
//参数RecordsAffected是操作完成后所影响的行数
//参数Options表示CommandText的类型,adCmdText-文本命令,adCmdTable-表名
//adCmdProc-存储过程,adCmdUnknown-未知
m_pConnection->Execute(bstrSQL,NULL,adCmdText);
return true;
}
catch( _com_error &e )
{
// AfxMessageBox("无法执行该操作,请核对操作");
AfxMessageBox(e.Description());
return FALSE;
}
}
void ADOConn::ExitConnect()
{
//关闭记录集和连接
if(m_pRecordset != NULL)
{
m_pRecordset->Close();
m_pRecordset = NULL;
}
m_pConnection->Close();
m_pConnection = NULL;
//释放环境
::CoUninitialize();
}
bool ADOConn::DeleteRecord(_bstr_t bstrSQL)
{
ExecuteSQL(bstrSQL);
return false;
}
// 增加一条记录
bool ADOConn::AddRecord(_bstr_t bstrSQL)
{
ExecuteSQL(bstrSQL);
return false;
}
// 更新一条记录
bool ADOConn::UpdateRecord(_bstr_t bstrSQL)
{
ExecuteSQL(bstrSQL);
return false;
}