天天看点

c ado mysql_C++ ADO操作mysql数据库

1、安装mysql5.5 和mysql连接驱动mysql-connector-odbc-5.1.12-win32.msi

2、给mysql添加数据源,方法可百度windows下mysql如何在odbc添加数据源

3、如果在添加数据源的时候无法找到MySQL ODBC 5.1 Driver,则需要进行如下步骤:

进入dos命令行,输入: C:\Users\Administrator>cd\windows\SysWOW64 C:\windows\SysWOW64>odbcad32

详细步骤地址:http://bbs.csdn.net/topics/391986934

4、下面在vs2013下进行C++ ADO操作mysql数据库

ADOConn.h

#pragma once

//导入ADO库,位置在计算机c盘

#import "c:\Program Files\Common Files\System\ado\msado15.dll" no_namespace rename("EOF","adoEOF") rename("BOF","adoBOF") //32位系统加上这个

//#import "c:\Program Files (x86)\Common Files\System\ado\msado15.dll" no_namespace rename("EOF", "adoEOF") rename("BOF","adoBOF") //64位系统加上这个

class CADOConn

{

public:

CADOConn(void);

~CADOConn(void);

public:

//添加一个指向Connection对象的指针:

_ConnectionPtr m_pConnection;

//添加一个指向Recordset对象的指针:

_RecordsetPtr m_pRecordset;

// 定义方法

public:

// 初始化—连接数据库

void OnInitADOConn();

// 执行查询

_RecordsetPtr& GetRecordSet(_bstr_t bstrSQL);

// 执行SQL语句,Insert Update _variant_t

BOOL ExecuteSQL(_bstr_t bstrSQL);

void ExitConnect();

};

ADOConn.cpp

#include "ADOConn.h"

CADOConn::CADOConn(void)

{

}

CADOConn::~CADOConn(void)

{

}

void CADOConn::OnInitADOConn()

{

// 初始化OLE/COM库环境

::CoInitialize(NULL);

HRESULT hr;

try

{

// 创建Connection对象,可以通过配置文件获取连接信息

hr = m_pConnection.CreateInstance("ADODB.Connection");

if (SUCCEEDED(hr))

{

m_pConnection->ConnectionTimeout = 600;//设置连接超时时间

m_pConnection->CommandTimeout = 120;//设置执行命令超时时间

m_pConnection->Open("DSN=mysql;Server= localhost;Database=home", "root", "123456", adModeUnknown);

//mysql是设置好的Data Soure Name

//Server= localhost 本机

//Database=home,home是用mysql创建的数据库

//root和123456分别是登录mysql数据库的用户名和密码

}

}

// 捕捉异常

catch (_com_error e)

{

// 显示错误信息

//AfxMessageBox(e.Description());//需要建立MFC工程,但我这里是控制台工程,就把它注释掉了,下同

}

}

_RecordsetPtr& CADOConn::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;

}

BOOL CADOConn::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 CADOConn::ExitConnect()

{

// 关闭记录集和连接

if (m_pRecordset != NULL)

{

m_pRecordset->Close();

//m_pRecordset->Release();

}

m_pConnection->Close();

//m_pConnection->Release();

// 释放环境

::CoUninitialize();

}

main.cpp

#include "ADOConn.h"

int main()

{

CADOConn m_ADO;

m_ADO.OnInitADOConn();

//在进行sql语句之前,先要用mysql创建数据库home,然后建立一张teacher表,包含id和name两个字段

//设置SELECT语句

_bstr_t vSQL, vInserSQL;

vSQL = "select name from teacher";

//设置INSERT语句

vInserSQL = "insert into teacher values(2, '张')";

///执行INSERT语句

if (m_ADO.ExecuteSQL(vInserSQL))

{

printf("Insert Data Successful!!!\n");

}

//执行SELETE语句

_RecordsetPtr m_pRecordset;

m_pRecordset = m_ADO.GetRecordSet(vSQL);

LPCTSTR name; //LPCTSTR等价于const TCHAR *

//const TCHAR * name;

//返回各列的值

while (!m_pRecordset->adoEOF)

{

name = (LPCTSTR)(_bstr_t)m_pRecordset->GetCollect("name");

printf("name : %s\n", name);

m_pRecordset->MoveNext();

}

//断开与数据库的连接

m_ADO.ExitConnect();

return 0;

}