C++ MFC 连接数据库(附工程源码)

本文介绍如何在Visual Studio 2008环境下使用C++进行MySQL数据库的操作,包括连接数据库、执行查询、获取结果集等功能,并提供了一个自定义的CDatabase类来封装这些操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

连接数据库几种方式:

  • SQL SERVER
  • ODBC
  • OLE DB
  • MYSQL

一、MySQL

这里介绍如何连接MySQL数据库,使用的是MySQLworkbench6.3版本,其他版本也可以,安装过程百度

1、表定义

 

开发平台

这里使用的是vs2008版本,建议2010版本,用visualC++也可以,根据情况导入。

界面:

 

代码

自定义了一个CDatabase类,实现数据库操作的封装。

mysql.h等数据库文件见源代码。

#include "StdAfx.h"
#include "MFCDlg.h"
#include <cstring> 
#include <string> 
#include "CDatabase.h"

// 构造函数初始化MYSQL对象
CDatabase::CDatabase()
{
	mysql_init(&mysql);
}

// 析构函数
CDatabase::~CDatabase()
{
	Close();
	mysql_library_end();
}

// 关闭数据库连接
void CDatabase::Close()
{
	if(query)	mysql_free_result(query);
	mysql_close(&mysql);
}

// 打开数据库
bool CDatabase::Open(char* host, char* user, char* pass, char* db)
{
	CString  error;
	if(!mysql_real_connect(&mysql, host, user, pass, db, 3306, NULL, 0))
	{ 		
		error = mysql_error(&mysql);
		AfxMessageBox(error);
		//printf("执行查询操作失败。错误原因: %s\n",  mysql_error(&mysql));		
		return false;
	}
	return true;
}

//选择记录
bool CDatabase::Execute(char* sql)
{
	if(mysql_real_query(&mysql, sql, strlen(sql)))	return false;
	query = mysql_use_result(&mysql);
	return true;
}
//设置编码
void CDatabase::SetCode()
{
	//mysql_set_character_set(&mysql, "utf8");
	AfxMessageBox("成功");
}
//获取字段个数
int CDatabase::GetFieldNum()
{
	if (query) return mysql_num_fields(query);
	return 0;
}

//获取记录行
MYSQL_ROW CDatabase::GetRecord()
{
	if (query) 
	{
		row = mysql_fetch_row(query);
		return row;
	}
	return NULL;
}

// 获取记录集
void CDatabase::GetRecords()
{
	query = mysql_use_result(&mysql);
}

// 获取记录集字段值的长度
unsigned long * CDatabase::GetRecordFieldLength()
{
	if (query) return mysql_fetch_lengths(query);
	return NULL;
}
// 显示查询结果集
bool CDatabase::ShowRecords(char* sql)
{
	// 执行查询操作
	if (!Execute(sql)) return FALSE;


	unsigned int nFields = GetFieldNum();

	CEdit* pWnd = (CEdit*)AfxGetApp()->m_pMainWnd->GetDlgItem(IDC_EDIT1);
	while ((row = GetRecord()))
	{
		unsigned long *lengths;
		lengths = GetRecordFieldLength();
		for(UINT i = 0; i < nFields; i++)
		{
			//printf("[%.*s] ", (int) lengths[i], row[i] ? row[i] : "NULL");
			char *s = new char[200];
			sprintf(s,"%.*s ", (int) lengths[i], row[i] ? row[i] : "NULL");
			
			//CMFCDlg myDialog = new CMFCDlg();
			//((CEdit*)myDialog.GetDlgItem(IDC_EDIT1))->SetWindowText(_T("xxxx"));
			//myDialog->SetWindowText("123")
			int nLength=pWnd->SendMessage(WM_GETTEXTLENGTH);  
			pWnd->SetSel(nLength,  nLength);  
			pWnd->ReplaceSel(s);
			/*m.setedit(s);*/
		}
		//printf("\n");
	}

	//printf("--------------------------------------------------\n");
	return TRUE;
}

 

源码链接

https://download.youkuaiyun.com/download/u011752195/10686142

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值