通过自己摸索和网上帮助 了解了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