注:关闭“数据库连接属性”后再次双击mysql.udl打开该对话框,会因为密码丢失问题点击“测试连接”会连接不上,把“数据库连接属性”对话框上的密码等补全就可以了,用文本方式打开mysql.udl文件就是完整的连接字符串。
// ADOConn.h: interface for the ADOConn class.
//
//
//#import "c:\Program Files\Common Files\System\ado\msado15.dll" no_namespace rename//("EOF","adoEOF") rename("BOF","adoBOF")
#if !defined(AFX_ADOCONN_H__AC448F02_AF26_45E4_9B2D_D7ECB8FFCFB9__INCLUDED_)
#define AFX_ADOCONN_H__AC448F02_AF26_45E4_9B2D_D7ECB8FFCFB9__INCLUDED_
#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000
class ADOConn
{
// 定义变量
public:
_ConnectionPtr m_pConnection;//添加一个指向Connection对象的指针
_RecordsetPtr m_pRecordset; //添加一个指向Recordset对象的指针
// 定义方法
public:
ADOConn();
virtual ~ADOConn();
void OnInitADOConn(); // 初始化—连接数据库
_RecordsetPtr& GetRecordSet(_bstr_t bstrSQL); // 执行查询
BOOL ExecuteSQL(_bstr_t bstrSQL); // 执行SQL语句,Insert Update
void ExitConnect(); //断开数据库连接
void CloseRecordset(); //关闭记录集
};
#endif // !defined(AFX_ADOCONN_H__AC448F02_AF26_45E4_9B2D_D7ECB8FFCFB9__INCLUDED_)
// ADOConn.cpp: implementation of the ADOConn class.
//
//
#include "stdafx.h"
#include "ADOConn.h"
#ifdef _DEBUG
#undef THIS_FILE
static char THIS_FILE[]=__FILE__;
#define new DEBUG_NEW
#endif
//
// Construction/Destruction
//
ADOConn::ADOConn()
{
}
ADOConn::~ADOConn()
{
}
// 初始化—连接数据库
void ADOConn::OnInitADOConn()
{
::CoInitialize(NULL);// 初始化OLE/COM库环境
try
{
//m_pConnection.CreateInstance("ADODB.Connection"); // 创建Connection对象
m_pConnection.CreateInstance(__uuidof(Connection)); // 创建Connection对象
//设置链接字符串
_bstr_t strConnect="Driver=MySQL ODBC 5.1 Driver;SERVER=127.0.0.1;UID=root;DATABASE=test;PORT=3306";
m_pConnection->Open(strConnect,"root","nfz",adModeUnknown);
}
catch(_com_error e) // 捕捉异常
{
AfxMessageBox(e.Description()); // 显示错误信息
}
}
_RecordsetPtr& ADOConn::GetRecordSet(_bstr_t bstrSQL) //打开记录集
{
try
{
if(m_pConnection==NULL) // 连接数据库,如果Connection对象为空,则重新连接数据库
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)
{
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::CloseRecordset()
{
if (m_pRecordset != NULL)
m_pRecordset->Close();
}
// 断开连接
void ADOConn::ExitConnect()
{
m_pConnection->Close(); //关闭链接
m_pRecordset.Release(); //释放COM接口的引用计数
m_pConnection.Release(); //释放COM接口的引用计数
::CoUninitialize(); // 释放环境
}
编写好封装类:
ADOConn。
在一个工程里加入该类的方法为:把该类的头文件和
cpp
文件拷贝到工程所在的文件夹里。然后在工程的工作区选择
Project->Add to Project->Files,
将这两个文件选择加入。之后,就可以在程序里应用这个类了。
参考博文: