VC++ ADO 连接 mysql

时间:2020-11-30 21:46:59

通过自己摸索和网上帮助 了解了VC++ 用ADO 连接mysql数据库的方法:
     使用的方法是利用ADO通过建立ODBC数据源来最终达到访问MySQL的目的。
     1.安装mysql数据库服务器程序,也可安装appserv-win32-2.5.9.rar  里面包含了appche ,php,mysql ,安装后者可以通过网页管理数据库。因为方便所以我才用后者。
       VC++ ADO 连接 mysql      VC++ ADO 连接 mysql
安装过程中记住密码。
2.建立数据库:
    可以通过命令行 也可以通过网页建立:http://localhost/phpMyAdmin/  输入用户名root 和密码就可通过网页管理数据库。
    可以导入数据库:
-- phpMyAdmin SQL Dump
-- version 2.10.2
-- http://www.phpmyadmin.net
-- 
-- 主机: localhost
-- 生成日期: 2009 年 07 月 24 日 11:56
-- 服务器版本: 5.0.22
-- PHP 版本: 5.2.3

SET SQL_MODE="NO_AUTO_VALUE_ON_ZERO";

-- 
-- 数据库: `testmysql`
--

-- --------------------------------------------------------

-- 
-- 表的结构 `test`
--

CREATE TABLE `test` (
  `id` int(4) NOT NULL auto_increment,
  `name` varchar(50) NOT NULL,
  PRIMARY KEY  (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=gbk AUTO_INCREMENT=3 ;

-- 
-- 导出表中的数据 `test`
--

INSERT INTO `test` VALUES (1, 'qq');
INSERT INTO `test` VALUES (2, 'ww');

3.安装MyODBC 我安装的是:MyODBC-3.51.11-2-win.exe
   然后:开始菜单->设置->控制面板->管理工具->数据源(ODBC)->系统DSN->添加->选择MySQL ODBC 3.51 Driver
  VC++ ADO 连接 mysql
这里可以填写所有的数据  以可以在程序里面填写数据 这里 DSN 为 ADOmysql
 4.所有准备工作已做完,那我们就可以开始写程序连接数据库:
程序代码: 代码来源:《Visual C++ + SQL Server 数据库应用实例 完全解析》

 1VC++ ADO 连接 mysql// ADOConn.h: interface for the ADOConn class.
 2VC++ ADO 连接 mysql//
 3VC++ ADO 连接 mysql//////////////////////////////////////////////////////////////////////
 4VC++ ADO 连接 mysql#import "c:\Program Files\Common Files\System\ado\msado15.dll" no_namespace rename("EOF","adoEOF") rename("BOF","adoBOF")
 5VC++ ADO 连接 mysql
 6VC++ ADO 连接 mysql#if !defined(AFX_ADOCONN_H__AC448F02_AF26_45E4_9B2D_D7ECB8FFCFB9__INCLUDED_)
 7VC++ ADO 连接 mysql#define AFX_ADOCONN_H__AC448F02_AF26_45E4_9B2D_D7ECB8FFCFB9__INCLUDED_
 8VC++ ADO 连接 mysql
 9VC++ ADO 连接 mysql#if _MSC_VER > 1000
10VC++ ADO 连接 mysql#pragma once
11VC++ ADO 连接 mysql#endif // _MSC_VER > 1000
12VC++ ADO 连接 mysql
13VC++ ADO 连接 mysqlclass ADOConn  
14VC++ ADO 连接 mysql{
15VC++ ADO 连接 mysql// 定义变量
16VC++ ADO 连接 mysqlpublic:
17VC++ ADO 连接 mysql    //添加一个指向Connection对象的指针:
18VC++ ADO 连接 mysql    _ConnectionPtr m_pConnection;
19VC++ ADO 连接 mysql    //添加一个指向Recordset对象的指针:
20VC++ ADO 连接 mysql    _RecordsetPtr m_pRecordset;
21VC++ ADO 连接 mysql// 定义方法
22VC++ ADO 连接 mysqlpublic:
23VC++ ADO 连接 mysql    ADOConn();
24VC++ ADO 连接 mysql    virtual ~ADOConn();
25VC++ ADO 连接 mysql    // 初始化—连接数据库
26VC++ ADO 连接 mysql    void  OnInitADOConn();
27VC++ ADO 连接 mysql    // 执行查询
28VC++ ADO 连接 mysql    _RecordsetPtr& GetRecordSet(_bstr_t bstrSQL);
29VC++ ADO 连接 mysql    // 执行SQL语句,Insert Update _variant_t
30VC++ ADO 连接 mysql    BOOL ExecuteSQL(_bstr_t bstrSQL);
31VC++ ADO 连接 mysql    void ExitConnect();
32VC++ ADO 连接 mysql};
33VC++ ADO 连接 mysql
34VC++ ADO 连接 mysql#endif // !defined(AFX_ADOCONN_H__AC448F02_AF26_45E4_9B2D_D7ECB8FFCFB9__INCLUDED_)
35VC++ ADO 连接 mysql
  1VC++ ADO 连接 mysql// ADOConn.cpp: implementation of the ADOConn class.
  2VC++ ADO 连接 mysql//
  3VC++ ADO 连接 mysql//////////////////////////////////////////////////////////////////////
  4VC++ ADO 连接 mysql
  5VC++ ADO 连接 mysql#include "stdafx.h"
  6VC++ ADO 连接 mysql#include "ADOConn.h"
  7VC++ ADO 连接 mysql
  8VC++ ADO 连接 mysql#ifdef _DEBUG
  9VC++ ADO 连接 mysql#undef THIS_FILE
 10VC++ ADO 连接 mysqlstatic char THIS_FILE[]=__FILE__;
 11VC++ ADO 连接 mysql#define new DEBUG_NEW
 12VC++ ADO 连接 mysql#endif
 13VC++ ADO 连接 mysql
 14VC++ ADO 连接 mysql//////////////////////////////////////////////////////////////////////
 15VC++ ADO 连接 mysql// Construction/Destruction
 16VC++ ADO 连接 mysql//////////////////////////////////////////////////////////////////////
 17VC++ ADO 连接 mysql
 18VC++ ADO 连接 mysqlADOConn::ADOConn()
 19VC++ ADO 连接 mysql{
 20VC++ ADO 连接 mysql
 21VC++ ADO 连接 mysql}
 22VC++ ADO 连接 mysql
 23VC++ ADO 连接 mysqlADOConn::~ADOConn()
 24VC++ ADO 连接 mysql{
 25VC++ ADO 连接 mysql
 26VC++ ADO 连接 mysql}
 27VC++ ADO 连接 mysql
 28VC++ ADO 连接 mysql// 初始化—连接数据库
 29VC++ ADO 连接 mysqlvoid  ADOConn::OnInitADOConn()
 30VC++ ADO 连接 mysql{
 31VC++ ADO 连接 mysql    // 初始化OLE/COM库环境 
 32VC++ ADO 连接 mysql    ::CoInitialize(NULL);
 33VC++ ADO 连接 mysql  
 34VC++ ADO 连接 mysql    try
 35VC++ ADO 连接 mysql    {
 36VC++ ADO 连接 mysql        // 创建Connection对象
 37VC++ ADO 连接 mysql        m_pConnection.CreateInstance("ADODB.Connection");
 38VC++ ADO 连接 mysql        m_pConnection->Open("DSN=ADOmysql;Server= localhost;Database=testmysql","root","123456",adModeUnknown);
 39VC++ ADO 连接 mysql    } 
 40VC++ ADO 连接 mysql    // 捕捉异常
 41VC++ ADO 连接 mysql    catch(_com_error e)
 42VC++ ADO 连接 mysql    {
 43VC++ ADO 连接 mysql        // 显示错误信息
 44VC++ ADO 连接 mysql        AfxMessageBox(e.Description());
 45VC++ ADO 连接 mysql    }
 46VC++ ADO 连接 mysql}
 47VC++ ADO 连接 mysql
 48VC++ ADO 连接 mysql// 执行查询
 49VC++ ADO 连接 mysql_RecordsetPtr&  ADOConn::GetRecordSet(_bstr_t bstrSQL)
 50VC++ ADO 连接 mysql{
 51VC++ ADO 连接 mysql    try
 52VC++ ADO 连接 mysql    {
 53VC++ ADO 连接 mysql        // 连接数据库,如果Connection对象为空,则重新连接数据库
 54VC++ ADO 连接 mysql        if(m_pConnection==NULL)
 55VC++ ADO 连接 mysql            OnInitADOConn();
 56VC++ ADO 连接 mysql        // 创建记录集对象
 57VC++ ADO 连接 mysql        m_pRecordset.CreateInstance(__uuidof(Recordset));
 58VC++ ADO 连接 mysql        // 取得表中的记录
 59VC++ ADO 连接 mysql        m_pRecordset->Open(bstrSQL,m_pConnection.GetInterfacePtr(),adOpenDynamic,adLockOptimistic,adCmdText);
 60VC++ ADO 连接 mysql    }
 61VC++ ADO 连接 mysql    // 捕捉异常
 62VC++ ADO 连接 mysql    catch(_com_error e)
 63VC++ ADO 连接 mysql    {
 64VC++ ADO 连接 mysql        // 显示错误信息
 65VC++ ADO 连接 mysql        AfxMessageBox(e.Description());
 66VC++ ADO 连接 mysql    }
 67VC++ ADO 连接 mysql    // 返回记录集
 68VC++ ADO 连接 mysql    return m_pRecordset;
 69VC++ ADO 连接 mysql}
 70VC++ ADO 连接 mysql
 71VC++ ADO 连接 mysql // 执行SQL语句,Insert Update _variant_t
 72VC++ ADO 连接 mysqlBOOL ADOConn::ExecuteSQL(_bstr_t bstrSQL)
 73VC++ ADO 连接 mysql{
 74VC++ ADO 连接 mysql//    _variant_t RecordsAffected;
 75VC++ ADO 连接 mysql    try
 76VC++ ADO 连接 mysql    {
 77VC++ ADO 连接 mysql        // 是否已经连接数据库
 78VC++ ADO 连接 mysql        if(m_pConnection == NULL)
 79VC++ ADO 连接 mysql            OnInitADOConn();
 80VC++ ADO 连接 mysql        // Connection对象的Execute方法:(_bstr_t CommandText, 
 81VC++ ADO 连接 mysql        // VARIANT * RecordsAffected, long Options ) 
 82VC++ ADO 连接 mysql        // 其中CommandText是命令字串,通常是SQL命令。
 83VC++ ADO 连接 mysql        // 参数RecordsAffected是操作完成后所影响的行数, 
 84VC++ ADO 连接 mysql        // 参数Options表示CommandText的类型:adCmdText-文本命令;adCmdTable-表名
 85VC++ ADO 连接 mysql        // adCmdProc-存储过程;adCmdUnknown-未知
 86VC++ ADO 连接 mysql        m_pConnection->Execute(bstrSQL,NULL,adCmdText);
 87VC++ ADO 连接 mysql        return true;
 88VC++ ADO 连接 mysql    }
 89VC++ ADO 连接 mysql    catch(_com_error e)
 90VC++ ADO 连接 mysql    {
 91VC++ ADO 连接 mysql        AfxMessageBox(e.Description());
 92VC++ ADO 连接 mysql        return false;
 93VC++ ADO 连接 mysql    }
 94VC++ ADO 连接 mysql}
 95VC++ ADO 连接 mysql
 96VC++ ADO 连接 mysqlvoid ADOConn::ExitConnect()
 97VC++ ADO 连接 mysql{
 98VC++ ADO 连接 mysql    // 关闭记录集和连接
 99VC++ ADO 连接 mysql    if (m_pRecordset != NULL)
100VC++ ADO 连接 mysql        m_pRecordset->Close();
101VC++ ADO 连接 mysql    m_pConnection->Close();
102VC++ ADO 连接 mysql    // 释放环境
103VC++ ADO 连接 mysql    ::CoUninitialize();
104VC++ ADO 连接 mysql}

建立本类的一个对象 然后就可访问mysql数据库了:

 1VC++ ADO 连接 mysql    ADOConn m_ADO;
 2VC++ ADO 连接 mysql    m_ADO.OnInitADOConn();
 3VC++ ADO 连接 mysql    
 4VC++ ADO 连接 mysql    //设置SELECT语句
 5VC++ ADO 连接 mysql    _bstr_t vSQL;
 6VC++ ADO 连接 mysql    vSQL = "SELECT * FROM test WHERE id = 1";
 7VC++ ADO 连接 mysql    //执行SELETE语句
 8VC++ ADO 连接 mysql    _RecordsetPtr m_pRecordset;
 9VC++ ADO 连接 mysql    m_pRecordset = m_ADO.GetRecordSet(vSQL);
10VC++ ADO 连接 mysql
11VC++ ADO 连接 mysql    CString name0;
12VC++ ADO 连接 mysql    //返回各列的值
13VC++ ADO 连接 mysql    if (!m_pRecordset->adoEOF)
14VC++ ADO 连接 mysql    {
15VC++ ADO 连接 mysql
16VC++ ADO 连接 mysql        name0 = (LPCTSTR)(_bstr_t)m_pRecordset->GetCollect("name");
17VC++ ADO 连接 mysql    }
18VC++ ADO 连接 mysql    //断开与数据库的连接
19VC++ ADO 连接 mysql    m_ADO.ExitConnect();
20VC++ ADO 连接 mysql
21VC++ ADO 连接 mysql    MessageBox(name0, L"id = 1", 0);

运行结果:
VC++ ADO 连接 mysql