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

连接数据库几种方式:

  • SQL SERVER
  • ODBC
  • OLE DB
  • MYSQL

一、MySQL

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

C++ MFC 连接数据库(附工程源码)_第1张图片

1、表定义

C++ MFC 连接数据库(附工程源码)_第2张图片

C++ MFC 连接数据库(附工程源码)_第3张图片

 

开发平台

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

界面:

C++ MFC 连接数据库(附工程源码)_第4张图片

 

代码

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

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

#include "StdAfx.h"
#include "MFCDlg.h"
#include  
#include  
#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.csdn.net/download/u011752195/10686142

你可能感兴趣的:(C++)