您好,欢迎访问一九零五行业门户网

VC++ ADO 连接 mysql

通过自己摸索和网上帮助 了解了vc 用ado连接mysql数据库的方法: 使用的方法是利用ado通过建立odbc数据源来最终达到访问mysql的目的。 1.安装mysql数据库服务器程序,也可安装appserv-win32-2.5.9.rar 里面包含了appche ,php,mysql ,安装后者可以通过网页
  通过自己摸索和网上帮助 了解了vc++ 用ado 连接mysql数据库的方法:
     使用的方法是利用ado通过建立odbc数据源来最终达到访问mysql的目的。
     1.安装mysql数据库服务器程序,也可安装appserv-win32-2.5.9.rar  里面包含了appche ,php,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
这里可以填写所有的数据  以可以在程序里面填写数据 这里 dsn 为 adomysql
 4.所有准备工作已做完,那我们就可以开始写程序连接数据库:
程序代码: 代码来源:《visual c++ + sql server 数据库应用实例 完全解析》
1// adoconn.h: interface for the adoconn class.
 2//
 3/**///////////////////////////////////////////////////////////////////////
 4#import c:\program files\common files\system\ado\msado15.dll no_namespace rename(eof,adoeof) rename(bof,adobof)
 5
 6#if !defined(afx_adoconn_h__ac448f02_af26_45e4_9b2d_d7ecb8ffcfb9__included_)
 7#define afx_adoconn_h__ac448f02_af26_45e4_9b2d_d7ecb8ffcfb9__included_
 8
 9#if _msc_ver > 1000
10#pragma once
11#endif // _msc_ver > 1000
12
13class adoconn  
14{
15// 定义变量
16public:
17    //添加一个指向connection对象的指针:
18    _connectionptr m_pconnection;
19    //添加一个指向recordset对象的指针:
20    _recordsetptr m_precordset;
21// 定义方法
22public:
23    adoconn();
24    virtual ~adoconn();
25    // 初始化—连接数据库
26    void  oninitadoconn();
27    // 执行查询
28    _recordsetptr& getrecordset(_bstr_t bstrsql);
29    // 执行sql语句,insert update _variant_t
30    bool executesql(_bstr_t bstrsql);
31    void exitconnect();
32};
33
34#endif // !defined(afx_adoconn_h__ac448f02_af26_45e4_9b2d_d7ecb8ffcfb9__included_)
35
1// adoconn.cpp: implementation of the adoconn class.
  2//
  3/**///////////////////////////////////////////////////////////////////////
  4
  5#include stdafx.h
  6#include adoconn.h
  7
  8#ifdef _debug
  9#undef this_file
 10static char this_file[]=__file__;
 11#define new debug_new
 12#endif
 13
 14/**///////////////////////////////////////////////////////////////////////
 15// construction/destruction
 16/**///////////////////////////////////////////////////////////////////////
 17
 18adoconn::adoconn()
 19{
 20
 21}
 22
 23adoconn::~adoconn()
 24{
 25
 26}
 27
 28// 初始化—连接数据库
 29void  adoconn::oninitadoconn()
 30{
 31    // 初始化ole/com库环境 
 32    ::coinitialize(null);
 33  
 34    try
 35    {
 36        // 创建connection对象
 37        m_pconnection.createinstance(adodb.connection);
 38        m_pconnection->open(dsn=adomysql;server= localhost;database=testmysql,root,123456,admodeunknown);
 39    } 
 40    // 捕捉异常
 41    catch(_com_error e)
 42    {
 43        // 显示错误信息
 44        afxmessagebox(e.description());
 45    }
 46}
 47
 48// 执行查询
 49_recordsetptr&  adoconn::getrecordset(_bstr_t bstrsql)
 50{
 51    try
 52    {
 53        // 连接数据库,如果connection对象为空,则重新连接数据库
 54        if(m_pconnection==null)
 55            oninitadoconn();
 56        // 创建记录集对象
 57        m_precordset.createinstance(__uuidof(recordset));
 58        // 取得表中的记录
 59        m_precordset->open(bstrsql,m_pconnection.getinterfaceptr(),adopendynamic,adlockoptimistic,adcmdtext);
 60    }
 61    // 捕捉异常
 62    catch(_com_error e)
 63    {
 64        // 显示错误信息
 65        afxmessagebox(e.description());
 66    }
 67    // 返回记录集
 68    return m_precordset;
 69}
 70
 71 // 执行sql语句,insert update _variant_t
 72bool adoconn::executesql(_bstr_t bstrsql)
 73{
 74//    _variant_t recordsaffected;
 75    try
 76    {
 77        // 是否已经连接数据库
 78        if(m_pconnection == null)
 79            oninitadoconn();
 80        // connection对象的execute方法:(_bstr_t commandtext, 
 81        // variant * recordsaffected, long options ) 
 82        // 其中commandtext是命令字串,通常是sql命令。
 83        // 参数recordsaffected是操作完成后所影响的行数, 
 84        // 参数options表示commandtext的类型:adcmdtext-文本命令;adcmdtable-表名
 85        // adcmdproc-存储过程;adcmdunknown-未知
 86        m_pconnection->execute(bstrsql,null,adcmdtext);
 87        return true;
 88    }
 89    catch(_com_error e)
 90    {
 91        afxmessagebox(e.description());
 92        return false;
 93    }
 94}
 95
 96void adoconn::exitconnect()
 97{
 98    // 关闭记录集和连接
 99    if (m_precordset != null)
100        m_precordset->close();
101    m_pconnection->close();
102    // 释放环境
103    ::couninitialize();
104}
建立本类的一个对象 然后就可访问mysql数据库了:
 1    adoconn m_ado;
 2    m_ado.oninitadoconn();
 3    
 4    //设置select语句
 5    _bstr_t vsql;
 6    vsql = select * from test where id = 1;
 7    //执行selete语句
 8    _recordsetptr m_precordset;
 9    m_precordset = m_ado.getrecordset(vsql);
10
11    cstring name0;
12    //返回各列的值
13    if (!m_precordset->adoeof)
14    {
15
16        name0 = (lpctstr)(_bstr_t)m_precordset->getcollect(name);
17    }
18    //断开与数据库的连接
19    m_ado.exitconnect();
20
21    messagebox(name0, lid = 1, 0);
运行结果:
http://hi.baidu.com/blueliche_n/item/02c888ffbc45245ac9f337b2
其它类似信息

推荐信息