1、安裝mysql-5.0.22-win32,mysql-connector-odbc-5.1.12-win32.msi 然后:開始菜單->設(shè)置->控制面板->管理工具->數(shù)據(jù)源(ODBC)->系統(tǒng)DSN->添加->選擇MySQL ODBC 5.1 Driver
2、首先導入ADO類型庫,您的環(huán)境中msado15.dll不一定在這個目錄下,請按實際情況修改。或者把msado15.dll這個文件拷貝到你的工程目錄下,直接#import "msado15.dll" \ no_namespace \rename ("EOF", "adoEOF")包含進來。
在stdafx.h加入如下代碼:
#include <afxdb.h> // MFC Automation classes
#import "C:\Program Files\Common Files\System\ado\msado15.dll" no_namespace rename("EOF","adoEOF") rename("BOF","adoBOF")
3、代碼示例:
.h文件:
/************************************************************************
*Copyright:
*FileName:ADOConn.h
*
*Author:wanghaiguang
*Date:2013-03-07
*Description:ADO Operate MySql DataBase
************************************************************************/
#pragma once
class CADOConn
{
public:
CADOConn(void);
~CADOConn(void);
public:
//添加一個指向Connection對象的指針:
_ConnectionPtr m_pConnection;
//添加一個指向Recordset對象的指針:
_RecordsetPtr m_pRecordset;
// 定義方法
public:
// 初始化—連接數(shù)據(jù)庫
void OnInitADOConn();
// 執(zhí)行查詢
_RecordsetPtr& GetRecordSet(_bstr_t bstrSQL);
// 執(zhí)行SQL語句,Insert Update _variant_t
BOOL ExecuteSQL(_bstr_t bstrSQL);
void ExitConnect();
};
.cpp文件:
#include "StdAfx.h"
#include "ADOConn.h"
CADOConn::CADOConn(void)
{
}
CADOConn::~CADOConn(void)
{
}
/************************************************************************
*Function : OnInitADOConn
*Description: Init DataBase Connect
*param : bconString[in] ()
*return : void
************************************************************************/
void CADOConn::OnInitADOConn()
{
// 初始化OLE/COM庫環(huán)境
::CoInitialize(NULL);
HRESULT hr;
try
{
// 創(chuàng)建Connection對象,可以通過配置文件獲取連接信息
hr = m_pConnection.CreateInstance("ADODB.Connection");
if(SUCCEEDED(hr))
{
m_pConnection->ConnectionTimeout=600;//設(shè)置連接超時時間
m_pConnection->CommandTimeout=120;//設(shè)置執(zhí)行命令超時時間
m_pConnection->Open("DSN=MySqlTest;Server= localhost;Database=school","root","sa",adModeUnknown);
}
}
// 捕捉異常
catch(_com_error e)
{
// 顯示錯誤信息
AfxMessageBox(e.Description());
}
}
/************************************************************************
*Function : GetRecordSet
*Description: Select Data
*param : bstrSQL[in] SQL
*return : _RecordsetPtr
************************************************************************/
_RecordsetPtr& CADOConn::GetRecordSet(_bstr_t bstrSQL)
{
try
{
// 連接數(shù)據(jù)庫,如果Connection對象為空,則重新連接數(shù)據(jù)庫
if(m_pConnection==NULL)
OnInitADOConn();
// 創(chuàng)建記錄集對象
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;
}
/************************************************************************
*Function : ExecuteSQL
*Description: Exec SQL For Insert Update _variant_t
*param : bstrSQL[in] SQL
*return : BOOL
************************************************************************/
BOOL CADOConn::ExecuteSQL(_bstr_t bstrSQL)
{
// _variant_t RecordsAffected;
try
{
// 是否已經(jīng)連接數(shù)據(jù)庫
if(m_pConnection == NULL)
OnInitADOConn();
// Connection對象的Execute方法:(_bstr_t CommandText,
// VARIANT * RecordsAffected, long Options )
// 其中CommandText是命令字串,通常是SQL命令。
// 參數(shù)RecordsAffected是操作完成后所影響的行數(shù),
// 參數(shù)Options表示CommandText的類型:adCmdText-文本命令;adCmdTable-表名
// adCmdProc-存儲過程;adCmdUnknown-未知
m_pConnection->Execute(bstrSQL,NULL,adCmdText);
return true;
}
catch(_com_error e)
{
AfxMessageBox(e.Description());
return false;
}
}
/************************************************************************
*Function : ExitConnect
*Description: Exit Connect DataBase
*param :
*return : void
************************************************************************/
void CADOConn::ExitConnect()
{
// 關(guān)閉記錄集和連接
if (m_pRecordset != NULL)
{
m_pRecordset->Close();
//m_pRecordset->Release();
}
m_pConnection->Close();
//m_pConnection->Release();
// 釋放環(huán)境
::CoUninitialize();
}
其他連接數(shù)據(jù)庫:
BOOL ConnectMySqlFun1()
{
CoInitialize(NULL); //初始化Com組件
conPtr.CreateInstance(__uuidof(Connection)); //Connection用于與數(shù)據(jù)庫服務(wù)器的鏈接另一種方式
/******************連接數(shù)據(jù)庫********************/
try
{
// MySqlTest為數(shù)據(jù)源名 localhost表示本地 root表示用戶名 sa表示密碼
conPtr->Open("DSN=MySqlTest;server=localhost;database=school;","root","sa",adModeUnknown);///連接MySql數(shù)據(jù)庫(測試成功)
}
catch(_com_error e) //捕捉異常
{
printf("Connect Error : %s", e.Description());
return FALSE;
}
return TRUE;
}
BOOL ConnectMySqlFun2()
{
CoInitialize(NULL); //初始化Com組件
try
{
//創(chuàng)建連接對象實例
conPtr.CreateInstance("ADODB.Connection");
//設(shè)置連接字符串
//mdb------------------------------------------------
CString strConnect="DSN=MySqlTest";
//使用Open方法連接數(shù)據(jù)庫
conPtr->Open((_bstr_t)strConnect,"root","sa",adModeUnknown);
}
catch(_com_error e)
{
printf("Connect Error : %s", e.Description());
return FALSE;
}
return TRUE;
}
操作MySql數(shù)據(jù)庫:
CADOConn m_ADO;
m_ADO.OnInitADOConn();
//設(shè)置SELECT語句
_bstr_t vSQL, vInserSQL;
vSQL = "select name from teacher";
//設(shè)置INSERT語句
vInserSQL = "insert into teacher values(27, 'hai', '哈爾濱六中', '1998-05-05')";
///執(zhí)行INSERT語句
if (m_ADO.ExecuteSQL(vInserSQL))
{
printf("Insert Data Successful!!!");
}
//執(zhí)行SELETE語句
_RecordsetPtr m_pRecordset;
m_pRecordset = m_ADO.GetRecordSet(vSQL);
CString name0;
//返回各列的值
while (!m_pRecordset->adoEOF)
{
name0 = (LPCTSTR)(_bstr_t)m_pRecordset->GetCollect("name");
//CString name=(CString)recordPtr->GetCollect(_variant_t("name")).bstrVal;
//int no=recordPtr->GetCollect(_variant_t("stuno")).intVal;
printf("name : %s\n", name0);
m_pRecordset->MoveNext();
}
//斷開與數(shù)據(jù)庫的連接
m_ADO.ExitConnect();
參考鏈接:http://www.shnenglu.com/current/archive/2009/07/24/91069.html
posted on 2013-03-07 15:30
王海光 閱讀(4893)
評論(0) 編輯 收藏 引用 所屬分類:
DataBase