#ifdef _DEBUG
#undef THIS_FILE
static char THIS_FILE[]=__FILE__
#define new DEBUG_NEW
#endif
//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////
ADOConn::ADOConn()
{
}
ADOConn::~ADOConn()
{
}
// 初始化—连接数据库
void ADOConn::OnInitADOConn()
{
// 初始化OLE/COM库环境
::CoInitialize(NULL)
try
{
// 创建Connection对象
m_pConnection.CreateInstance("ADODB.Connection")
// 设置连接字符串,必须是BSTR型或者_bstr_t类型
_bstr_t strConnect = "Provider=MSDASQL.1Persist Security Info=FalseUser ID=***Data Source=***"
m_pConnection->Open(strConnect,"","",adModeUnknown)
}
// 捕捉异常
catch(_com_error e)
{
// 显示错误信息
AfxMessageBox(e.Description())
}
}
// 执行查询
_RecordsetPtr& ADOConn::GetRecordSet(_bstr_t bstrSQL)
{
try
{
// 连接数据库,如果Connection对象为空,则重新连接数据库
if(m_pConnection==NULL)
OnInitADOConn()
// 创建记录集对象
m_pRecordset.CreateInstance(__uuidof(Recordset))
// 取得表中的记录
m_pRecordset->Open(bstrSQL,m_pConnection.GetInterfacePtr(),adOpenDynamic,adLockOptimistic,adCmdText)
}
// 捕捉异常
catch(_com_error e)
{
// 显示错误信息
AfxMessageBox(e.Description())
}
// 返回记录集
return m_pRecordset
}
// 执行SQL语句,Insert Update _variant_t
BOOL ADOConn::ExecuteSQL(_bstr_t bstrSQL)
{
//_variant_t RecordsAffected
try
{
// 是否已经连接数据库
if(m_pConnection == NULL)
OnInitADOConn()
// 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(e.Description())
return false
}
}
void ADOConn::ExitConnect()
{
// 关闭记录集和连接
if (m_pRecordset != NULL)
m_pRecordset->Close()
m_pConnection->Close()
// 释放环境
::CoUninitialize()
}
VC下利用ADO连接Access数据库#include <iostream.h>
#import "c:\\program files\\common files\\system\\ado\\msado15.dll" no_namespace rename ("EOF", "adoEOF")
int main(){
//使用ADO连接数据库...
//---------------------------------------------------------------------------------
_ConnectionPtr m_pConnection
CoInitialize(NULL)
m_pConnection.CreateInstance(__uuidof(Connection))
// 在ADO *** 作中建议语句中要常用try...catch()来捕获错误信息,
// 因为它有时会经常出现一些想不到的错误。
try
{
// 打开本地Access库db1.mdb
m_pConnection->Open("Provider=Microsoft.Jet.OLEDB.4.0Data Source=db1.mdb","","",adModeUnknown)
}
catch(_com_error e)
{
cout<<"数据库连接失败,确认数据库db1.mdb是否在当前路径下!"<<endl
return FALSE
}
//-------------------------------------------------------------------------------------
//建立数据集
//-------------------------------------------------------------------------------------
_RecordsetPtr m_pRecordset
m_pRecordset.CreateInstance(__uuidof(Recordset))
// 在ADO *** 作中建议语句中要常用try...catch()来捕获错误信息,
// 因为它有时会经常出现一些意想不到的错误。
try
{
m_pRecordset->Open("SELECT * FROM Home2",
m_pConnection.GetInterfacePtr(), // 获取库接库的IDispatch指针
adOpenDynamic,
adLockOptimistic,
adCmdText)
}
catch(_com_error *e)
{
//AfxMessageBox(e->ErrorMessage())
cout<<e->ErrorMessage()<<endl
}
//--------------------------------------------------------------------------------------
//读取数据
//--------------------------------------------------------------------------------------
_variant_t var
char *strID,*strX,*strY
float X,Y
try
{
if(!m_pRecordset->BOF)
m_pRecordset->MoveFirst()
else
{
cout<<"表内数据为空"<<endl
return 1
}
// 读入库中各字段并加入列表框中
while(!m_pRecordset->adoEOF)
{
var = m_pRecordset->GetCollect("ID")
if(var.vt != VT_NULL)
strID= _com_util::ConvertBSTRToString((_bstr_t)var)//_variant_t转字符串
var = m_pRecordset->GetCollect("X")
if(var.vt != VT_NULL)
strX=_com_util::ConvertBSTRToString((_bstr_t)var)
var = m_pRecordset->GetCollect("Y")
if(var.vt != VT_NULL)
strY=_com_util::ConvertBSTRToString((_bstr_t)var)
cout<<strID<<"is"<<strX<<" "<<strY<<endl
m_pRecordset->MoveNext()
}
}
catch(_com_error *e)
{
cout<<e->ErrorMessage()<<endl
}
//--------------------------------------------------------------------------------------
//关闭数据集
m_pRecordset->Close()
m_pRecordset = NULL
//--------------------------------------------------------------------------------------
//关闭数据库连接
//--------------------------------------------------------------------------------------
if(m_pConnection->State)
m_pConnection->Close()
m_pConnection= NULL
return 0
}
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)