MFC通过ODBC连接Mysql程序

本文涉及的产品
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
RDS MySQL Serverless 高可用系列,价值2615元额度,1个月
简介: 分享到 一键分享 QQ空间 新浪微博 百度云收藏 人人网 腾讯微博 百度相册 开心网 腾讯朋友 百度贴吧 豆瓣网 搜狐微博 百度新首页 QQ好友 和讯微博 更多.

MFC通过ODBC连接Mysql程序

安装建立mysql,连接ODBC以及通过MFC拖控件这些过程网上很多,就不写了,说一下我的mysql中有database mytest 内有表格mytable,如下:

1、先通过vs2005建立一个MFC工程,vs自动生成文件如图:

2、打开stdafx.h头文件,添加如下语句

#include <odbcinst.h>
#include “afxdb.h”

这两个头文件应该是定义了后面用到的数据库操作类CDataBase、CRecodSet .etc的。

3、剩下的基本都是在ODBCTestDlg.cpp文件操作

  打开数据库进行数据显示:

  在OnInitDialog函数中添加如下语句

  

View Code

 

1 m_list.InsertColumn(1, _T("Name"), LVCFMT_LEFT,80);//在Listctrl控件上添加列,与数据库table对应。
2 m_list.InsertColumn(2, _T("Sex"), LVCFMT_LEFT,80);
3 m_list.InsertColumn(3, _T("Grade"), LVCFMT_LEFT,80);
4 CString cmdStr = _T("SELECT   * FROM mytable order by Name Desc");
5 m_show(cmdStr);

 

1
m_show()函数中的内容完全可以全部放在OnInitDialog()中,但考虑到后面操作数据库时,每次都要写同样的操作,故将其写一函数中
View Code

 

 
 1 // get data from database and show them in list control
 2 void CODBCTestDlg::m_show(CString cmdStr)
 3 {
 4     m_list.DeleteAllItems();
 5     CDatabase db;
 6     db.Open(NULL,FALSE,FALSE,L"ODBC;DSN=mydb;UID=root;PWD=123456");
 7     CRecordset rs( &db );
 8     rs.Open( CRecordset::forwardOnly, (L"%s", cmdStr));
 9     //short nFields = rs.GetODBCFieldCount();
10     while(!rs.IsEOF())
11     {
12 
13         CString varName;
14         rs.GetFieldValue(L"Name", varName); 
15         m_list.InsertItem(0, varName);
16         CString varSex;
17         rs.GetFieldValue(L"Sex", varSex); 
18         m_list.SetItemText(0, 1, varSex);
19         CString varGrade;
20         rs.GetFieldValue(L"Grade", varGrade); 
21         m_list.SetItemText(0, 2, varGrade);
22         rs.MoveNext();
23     }
24     m_list.SetExtendedStyle(LVS_EX_FLATSB | LVS_EX_FULLROWSELECT | LVS_EX_GRIDLINES); // | LVS_SINGLESEL);
25     rs.Close();
26     db.Close();
27 }
 
 
1
这样已经可以在ListCtrl中显示数据库中得内容了。

4、操作数据库

  a、点击ListCtrl在Edit control中显示对应内容,为ListCtrl添加响应函数

  

View Code

 

 
 1 void CODBCTestDlg::OnLvnItemchangedList1(NMHDR *pNMHDR, LRESULT *pResult)
 2 {
 3     LPNMLISTVIEW pNMLV = reinterpret_cast<LPNMLISTVIEW>(pNMHDR);
 4     // TODO: Add your control notification handler code here
 5 
 6 #if 0
 7     LPNMITEMACTIVATE lpNMItemActivate = (LPNMITEMACTIVATE)pNMHDR;
 8     if (lpNMItemActivate != NULL)
 9     {
10         nItem = lpNMItemActivate->iItem;
11     }
12     LV_ITEM lvitem = {0};
13     lvitem.iItem =nItem;
14     lvitem.iSubItem = 0;
15     lvitem.mask = LVIF_TEXT | LVIF_IMAGE | LVIF_PARAM;
16     m_list.GetItem(&lvitem);
17     m_control_edit_name.SetWindowText(lvitem.pszText);
18 #endif
19     int nIndex;
20     CString name, sex, grade;
21     //nIndex = m_list.GetSelectionMark();
22     nIndex = m_list.GetNextItem(-1, LVNI_ALL | LVNI_SELECTED);
23     if(-1 == nIndex)
24         nIndex = 0;
25     name = m_list.GetItemText(nIndex, 0);
26     sex = m_list.GetItemText(nIndex, 1);
27     grade = m_list.GetItemText(nIndex, 2);
28     m_control_edit_name.SetWindowText(name);
29     m_control_edit_sex.SetWindowText(sex);
30     m_control_edit_grade.SetWindowText(grade);
31 
32     *pResult = 0;
33 }
 

  b、在mysql 中add数据函数

  

View Code

 

 
 1 void CODBCTestDlg::OnBnClickedAdd()
 2 {
 3     // TODO: Add your control notification handler code here
 4     CDatabase db;
 5     db.Open(NULL, FALSE, FALSE, _T("ODBC;DSN=mydb;UID=root;PWD=123456"));
 6     CString str, Name, Sex, Grade;
 7     m_control_edit_name.GetWindowText(Name);
 8     m_control_edit_sex.GetWindowText(Sex);
 9     m_control_edit_grade.GetWindowText(Grade);
10     //str = L"insert into mytable values('" + Name +L"','" + Sex +L"','"  + Grade + L"')";
11     str.Format(L"insert into mytable values('%s','%s','%s')", Name, Sex, Grade);
12     db.ExecuteSQL(str);
13     db.Close();
14     CString cmdStr = _T("SELECT   * FROM mytable order by name Desc");
15     m_show(cmdStr);
16 }
 

  c、在mysql中alter数据函数

View Code

 

 
 1 void CODBCTestDlg::OnBnClickedAlter()
 2 {
 3     // TODO: 在此添加控件通知处理程序代码
 4     int nIndex;
 5     CString name, sex, grade, newName, newSex, newGrade;
 6     CString dataToAlter;
 7     CDatabase db;
 8     db.Open(NULL, FALSE, FALSE, _T("ODBC;DSN=mydb;UID=root;PWD="));
 9     nIndex = m_list.GetSelectionMark();
10     if(-1 == nIndex)
11     {
12         AfxMessageBox(L"select a row data!");
13     }
14     else
15     {
16         name = m_list.GetItemText(nIndex, 0);
17         sex = m_list.GetItemText(nIndex, 1);
18         grade = m_list.GetItemText(nIndex, 2);
19     }
20     m_control_edit_name.GetWindowText(newName);
21     m_control_edit_sex.GetWindowText(newSex);
22     m_control_edit_grade.GetWindowText(newGrade);
23     if(newName.IsEmpty() || newSex.IsEmpty() || newGrade.IsEmpty())
24     {
25         AfxMessageBox(L"Name,Sex,Grade all cannot be empty");
26     }
27     dataToAlter.Format(L"update mytable set Name='%s', Sex='%s', Grade='%s'\
28                         where Name='%s' and Sex='%s' and Grade='%s'",\
29                         newName, newSex, newGrade, name, sex, grade);
30     db.ExecuteSQL(dataToAlter);
31     db.Close();
32     CString cmdStr = _T("select * from mytable order by Name Desc");
33     m_show(cmdStr);
34 }
 

  d、在mysql中delete数据函数

View Code

 

 
 1 void CODBCTestDlg::OnBnClickedDelete()
 2 {
 3     // TODO: Add your control notification handler code here
 4     int nIndex;
 5     CString name, sex, grade, dataToDel;
 6     CDatabase db;
 7     db.Open(NULL, FALSE, FALSE, _T("ODBC;DSN=mydb;UID=root;PWD=123456"));
 8     nIndex = m_list.GetNextItem(-1, LVNI_ALL | LVNI_SELECTED);
 9     //if(-1 == nIndex)
10 //    nIndex = 0;
11     if(-1 != nIndex)
12     {
13         name = m_list.GetItemText(nIndex, 0);
14         sex = m_list.GetItemText(nIndex, 1);
15         grade = m_list.GetItemText(nIndex, 2);
16     }
17     else
18     {
19     m_control_edit_name.GetWindowText(name);
20     m_control_edit_sex.GetWindowText(sex);
21     m_control_edit_grade.GetWindowText(grade);
22     }
23 
24     dataToDel.Format(L"delete from mytable where Name='%s' and Sex='%s'", name, sex);
25     db.ExecuteSQL(dataToDel);
26     db.Close();
27     CString cmdStr = _T("select * from mytable order by Name Desc");
28     m_show(cmdStr);
29 
30 }
 

  e、在mysql中select数据函数(当时写find的没改)

View Code

 

 
 1 void CODBCTestDlg::OnBnClickedFind()
 2 {
 3     // TODO: Add your control notification handler code here
 4     CDatabase db;
 5     db.Open(NULL, FALSE, FALSE, _T("ODBC;DSN=mydb;UID=root;PWD=123456"));
 6     CString Name, str;
 7     m_control_edit_name.GetWindowText(Name);
 8     str.Format(_T("select * from mytable where Name= '%s' Desc"), Name);
 9     db.ExecuteSQL(str);
10     db.Close();
11     m_show(str);
12 }
 

到这里这个MFC连接mysql的程序基本完成。

技术改变世界! --狂诗绝剑
相关实践学习
如何在云端创建MySQL数据库
开始实验后,系统会自动创建一台自建MySQL的 源数据库 ECS 实例和一台 目标数据库 RDS。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助 &nbsp; &nbsp; 相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
目录
相关文章
|
14天前
|
SQL Java 关系型数据库
java连接mysql查询数据(基础版,无框架)
【10月更文挑战第12天】该示例展示了如何使用Java通过JDBC连接MySQL数据库并查询数据。首先在项目中引入`mysql-connector-java`依赖,然后通过`JdbcUtil`类中的`main`方法实现数据库连接、执行SQL查询及结果处理,最后关闭相关资源。
|
17天前
|
SQL JavaScript 关系型数据库
node博客小项目:接口开发、连接mysql数据库
【10月更文挑战第14天】node博客小项目:接口开发、连接mysql数据库
|
23天前
|
Java 关系型数据库 MySQL
【编程基础知识】Eclipse连接MySQL 8.0时的JDK版本和驱动问题全解析
本文详细解析了在使用Eclipse连接MySQL 8.0时常见的JDK版本不兼容、驱动类错误和时区设置问题,并提供了清晰的解决方案。通过正确配置JDK版本、选择合适的驱动类和设置时区,确保Java应用能够顺利连接MySQL 8.0。
103 1
|
26天前
|
Java 关系型数据库 MySQL
springboot学习五:springboot整合Mybatis 连接 mysql数据库
这篇文章是关于如何使用Spring Boot整合MyBatis来连接MySQL数据库,并进行基本的增删改查操作的教程。
44 0
springboot学习五:springboot整合Mybatis 连接 mysql数据库
|
26天前
|
SQL JavaScript 关系型数据库
Node.js 连接 MySQL
10月更文挑战第9天
18 0
|
27天前
|
存储 SQL 关系型数据库
Mysql学习笔记(二):数据库命令行代码总结
这篇文章是关于MySQL数据库命令行操作的总结,包括登录、退出、查看时间与版本、数据库和数据表的基本操作(如创建、删除、查看)、数据的增删改查等。它还涉及了如何通过SQL语句进行条件查询、模糊查询、范围查询和限制查询,以及如何进行表结构的修改。这些内容对于初学者来说非常实用,是学习MySQL数据库管理的基础。
104 6
|
24天前
|
存储 关系型数据库 MySQL
Mysql(4)—数据库索引
数据库索引是用于提高数据检索效率的数据结构,类似于书籍中的索引。它允许用户快速找到数据,而无需扫描整个表。MySQL中的索引可以显著提升查询速度,使数据库操作更加高效。索引的发展经历了从无索引、简单索引到B-树、哈希索引、位图索引、全文索引等多个阶段。
57 3
Mysql(4)—数据库索引
|
10天前
|
关系型数据库 MySQL Linux
在 CentOS 7 中通过编译源码方式安装 MySQL 数据库的详细步骤,包括准备工作、下载源码、编译安装、配置 MySQL 服务、登录设置等。
本文介绍了在 CentOS 7 中通过编译源码方式安装 MySQL 数据库的详细步骤,包括准备工作、下载源码、编译安装、配置 MySQL 服务、登录设置等。同时,文章还对比了编译源码安装与使用 RPM 包安装的优缺点,帮助读者根据需求选择最合适的方法。通过具体案例,展示了编译源码安装的灵活性和定制性。
46 2
|
13天前
|
存储 关系型数据库 MySQL
MySQL vs. PostgreSQL:选择适合你的开源数据库
在众多开源数据库中,MySQL和PostgreSQL无疑是最受欢迎的两个。它们都有着强大的功能、广泛的社区支持和丰富的生态系统。然而,它们在设计理念、性能特点、功能特性等方面存在着显著的差异。本文将从这三个方面对MySQL和PostgreSQL进行比较,以帮助您选择更适合您需求的开源数据库。
54 4
|
18天前
|
存储 关系型数据库 MySQL
如何在MySQL中创建数据库?
【10月更文挑战第16天】如何在MySQL中创建数据库?